2017-02-07 17 views
0

У меня есть два действия: один (MainActivity), где есть возможность выбрать категорию события, которое вы хотите увидеть, а второе действие (EventView) показывает вам те события, основанные на вашем выборе. Параметры категории являются: Arch Art Финансы НаукаФильтрация требуемых данных из Firebase на основе выбора кнопки

В следующей операции, я хочу, чтобы данные от Firebase прийти в виде зрения ресайклера на основе категории я выбираю, однако все мои данные из Firebase вызывается. Я добавил запрос рядом с моей базой данных, используя orderByChild, чтобы получить мои требуемые данные.

MainActivity.java

package com.example.admin.trialforevents; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
    Button b1, b2, b3, b4; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     b1 = (Button) findViewById(R.id.archBttn); 
     b2 = (Button) findViewById(R.id.artBttn); 
     b3 = (Button) findViewById(R.id.scienceBttn); 
     b4 = (Button) findViewById(R.id.financeBttn); 

     b1.setOnClickListener(this); 
     b2.setOnClickListener(this); 
     b3.setOnClickListener(this); 
     b4.setOnClickListener(this); 
    } 

    public void onClick(View view){ 
     Toast.makeText(this, "Button Selected !", Toast.LENGTH_SHORT).show(); 
     Intent i = new Intent(getApplicationContext(), EventView.class); 


    switch(view.getId()){ 
     case R.id.archBttn: 
      String arch = "Architecture"; 
      i.putExtra("Category", arch); 
      break; 

     case R.id.artBttn: 
      String art = "Art"; 
      i.putExtra("Category", art); 
      break; 

     case R.id.scienceBttn: 
      String science = "Science"; 
      i.putExtra("Category", science); 
      break; 

     case R.id.financeBttn: 
      String fin = "Finance"; 
      i.putExtra("Category", fin); 
      break; 
    } 
     startActivity(i); 
    } 
} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.admin.trialforevents.MainActivity"> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/archBttn" 
     android:text="Arch" 
     android:layout_marginTop="41dp" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" /> 

    <Button 
     android:text="Art " 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/archBttn" 
     android:layout_alignRight="@+id/archBttn" 
     android:layout_alignEnd="@+id/archBttn" 
     android:layout_marginTop="33dp" 
     android:id="@+id/artBttn" /> 

    <Button 
     android:text="Finance" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/financeBttn" 
     android:layout_below="@+id/artBttn" 
     android:layout_alignLeft="@+id/artBttn" 
     android:layout_alignStart="@+id/artBttn" 
     android:layout_marginTop="32dp" /> 

    <Button 
     android:text="Science" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/financeBttn" 
     android:layout_alignRight="@+id/financeBttn" 
     android:layout_alignEnd="@+id/financeBttn" 
     android:layout_marginTop="33dp" 
     android:id="@+id/scienceBttn" /> 
</RelativeLayout> 

EventView.java

package com.example.admin.trialforevents; 

import android.content.Context; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.util.Log; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.firebase.ui.database.FirebaseRecyclerAdapter; 
import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase; 
import com.squareup.picasso.Picasso; 

public class EventView extends AppCompatActivity{ 

    DatabaseReference databaseReference; 

    RecyclerView recyclerView; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_event_view); 

     databaseReference = FirebaseDatabase.getInstance().getReference().child("ApprovedEvents"); 


     recyclerView = (RecyclerView) findViewById(R.id.request_EventList); 

     //Avoid unnecessary layout passes by setting setHasFixedSize to true 
     recyclerView.setHasFixedSize(true); 

     //Select the type of layout manager you would use for your recyclerView 
     recyclerView.setLayoutManager(new LinearLayoutManager(this)); 

    } 

    @Override 
    protected void onStart() { 
     final String event_cat = getIntent().getStringExtra("Category"); 
     super.onStart(); 
     FirebaseRecyclerAdapter<Event, RequestViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Event, RequestViewHolder>(
       Event.class, 
       R.layout.event_list_row, 
       RequestViewHolder.class, 
       databaseReference.orderByChild(event_cat) 
     ) { 
      @Override 
      protected void populateViewHolder(RequestViewHolder viewHolder, Event model, int position) { 
        viewHolder.setTitle(model.getTitle()); 
        viewHolder.setDesc(model.getDesc()); 
        viewHolder.setCategory(model.getCategory()); 
        viewHolder.setLocation(model.getLocation()); 
        viewHolder.setPrice(model.getPrice()); 
        viewHolder.setImageUrl(getApplicationContext(), model.getImageUrl()); 
       viewHolder.imageButton.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         Toast.makeText(EventView.this, "Image Selected", Toast.LENGTH_SHORT).show(); 
        } 
       }); 
      } 
     }; 
     recyclerView.setAdapter(firebaseRecyclerAdapter); 
    } 

    public static class RequestViewHolder extends RecyclerView.ViewHolder { 
     View mView; 
     ImageView imageButton; 


     public RequestViewHolder(View itemView) { 
      super(itemView); 
      mView = itemView; 
      imageButton = (ImageView) mView.findViewById(R.id.request_image); 
     } 

     public void setTitle(String title) { 
      TextView a_title = (TextView) mView.findViewById(R.id.request_title); 
      a_title.setText(title); 
     } 

     public void setDesc(String desc) { 
      TextView a_desc = (TextView) mView.findViewById(R.id.request_desc); 
      a_desc.setText(desc); 
     } 

     public void setLocation(String location) { 
      TextView a_desc = (TextView) mView.findViewById(R.id.request_location); 
      a_desc.setText(location); 
     } 


     public void setCategory(String category) { 
      TextView a_category = (TextView) mView.findViewById(R.id.request_category); 
       a_category.setText(category); 
     } 

     public void setPrice(String price) { 
      TextView a_price = (TextView) mView.findViewById(R.id.request_price); 
      a_price.setText(price); 
     } 

     public void setImageUrl(Context ctx, String imageUrl) { 
      ImageView a_image = (ImageView) mView.findViewById(R.id.request_image); 
      Picasso.with(ctx).load(imageUrl).into(a_image); 
     } 
    } 
} 

activity_event_view.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.admin.trialforevents.EventView"> 
    <android.support.v7.widget.RecyclerView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/request_EventList" 
     android:clickable="true"/> 

</RelativeLayout> 

Event.java

package com.example.admin.trialforevents; 

public class Event { 

    private String title, desc, location, category, price, imageUrl; 

    public Event(String title, String imageUrl, String price, String category, String location, String desc) { 
     this.title = title; 
     this.imageUrl = imageUrl; 
     this.price = price; 
     this.category = category; 
     this.location = location; 
     this.desc = desc; 
    } 
    public Event(){ 

    } 
    public String getTitle() { 
     return title; 
    } 
    public void setTitle(String title) { 
     this.title = title; 
    } 

    public String getDesc() { 
     return desc; 
    } 

    public void setDesc(String desc) { 
     this.desc = desc; 
    } 

    public String getLocation() { 
     return location; 
    } 

    public void setLocation(String location) { 
     this.location = location; 
    } 

    public String getCategory() { 
     return category; 
    } 

    public void setCategory(String category) { 
     this.category = category; 
    } 

    public String getPrice() { 
     return price; 
    } 

    public void setPrice(String price) { 
     this.price = price; 
    } 

    public String getImageUrl() { 
     return imageUrl; 
    } 

    public void setImageUrl(String imageUrl) { 
     this.imageUrl = imageUrl; 
    } 

} 

event_list_row.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:weightSum="1"> 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/request_category" 
      android:textStyle="bold" 
      android:textSize="15dp" 
      android:padding="5dp" 
      android:layout_gravity="left" 
      android:text="Category will come here"/> 

     <TextView 
      android:layout_width="191dp" 
      android:layout_height="wrap_content" 
      android:id="@+id/request_location" 
      android:textSize="15dp" 
      android:gravity="right" 
      android:layout_gravity="right" 
      android:text="Location will come here" 
      android:padding="5dp" 
      android:textStyle="bold"/> 
    </LinearLayout> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Price will come here" 
     android:id="@+id/request_price" 
     android:paddingBottom="5dp" 
     android:paddingLeft="5dp"/> 
    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="275dp" 
     android:id="@+id/request_image" 
     android:src="@drawable/abc_btn_check_material" 
     android:adjustViewBounds="true" 
     android:clickable="true"/> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/request_title" 
     android:text="Title will come here " 
     android:padding="10dp" 
     android:textStyle="bold" 
     android:textSize="15dp" /> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/request_desc" 
     android:text="Desc will come here " 
     android:paddingLeft="10dp" 
     android:paddingRight="10dp" 
     android:paddingBottom="10dp" /> 


</LinearLayout> 

ответ

0

В FireBaseRecyclerAdapter при упоминании datareference в качестве аргумента, используйте запрос типа:

databaseReference.orderByChild("category").equalTo(event_cat) 

Это вызовет только категорию данных, которая требуется.

1

Вы почти получили!

Все хорошо, за исключением коммутатора: после каждого случая , вы должны предоставить перерыв.

То, как оно написано сейчас, всегда будет вызывать последний случай, который является «Финансы» в вашем случае.

ли это для вас:

switch(view.getId()){ 
    case R.id.archBttn: 
     String arch = "Architecture"; 
     i.putExtra("Category", arch); 
     break; 

    case R.id.artBttn: 
     String art = "Art"; 
     i.putExtra("Category", art); 
     break; 

    case R.id.scienceBttn: 
     String science = "Science"; 
     i.putExtra("Category", science); 
     break; 

    case R.id.financeBttn: 
     String fin = "Finance"; 
     i.putExtra("Category", fin); 
     break; 
} 

Side Примечание: ваш код красиво написано :)

+0

Эй, спасибо, это сработало, но я все еще сталкиваюсь с трудностями получения данных из Firebase на основе какой категории я выбираю. Спасибо за примечание стороны :) –

+0

Извините за отсутствие этого: Я думаю, что ваша проблема исходит из этой строки кода (в EventView.java): ** if (model.getCategory() == event_cat) ** В Java вы должны использовать функцию **. Equals ** для сравнения строк. У меня было много времени, чтобы понять это сам .. но оператор «==» просто не работает со строками. Попробуйте это: ** if (model.getCategory(). Equals (event_cat)) ** – Barackos

+0

Я попытался использовать это, но он еще не работает и показывает мне тот же файл макета event_list_row.xml –