2017-02-07 10 views
0

2つのアクティビティがあります。1つはMainActivity、2つ目のアクティビティ(EventView)は特定のイベントのカテゴリを選択するオプションですあなたの選択に基づくイベント。カテゴリオプションは次のとおりです。 アーチ アート 財務 科学ボタンの選択に基づいてFirebaseから必要なデータをフィルタリングする

次の活動では、私はFirebaseからしかし、私のすべてのデータ、Firebaseからのデータは、私が選択したカテゴリに基づいてリサイクルビューの形で来てほしいですが呼び出されています。私は必要なデータを取得するために、orderByChildを使ってdatabaseReferenceの隣にクエリを追加しました。

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; 
} 

サイドノート:あなたのコードを美しく書かれている:)

+0

ありがとう、それは働いていましたが、私が選択したカテゴリに基づいてFirebaseからデータを取得するのは困難です。 ありがとうサイドノート:) –

+0

あなたの問題はこのコード行(EventView.java)から来ていると思います。 ** if(model.getCategory()== event_cat)** Javaでは、文字列の比較に**。equals **関数を使用する必要があります。私自身、これを理解するのに多くの時間を費やしましたが、演算子 "=="は単に文字列では機能しません。これを試してみてください:** if(model.getCategory()。equals(event_cat))** – Barackos

+0

私はそれを使用しようとしましたが、まだ動作しておらず、event_list_row.xmlの同じレイアウトファイルを表示しています –

関連する問題