2017-08-30 12 views
0

私は最近、Android FirebaseアプリにsearchBarを追加しましたが、アプリでデータをフィルタリングする方法が実際には見つかりませんでした。 photo.Android - FirebaseのRecyclerViewをフィルタリングする方法は?

どうすればいいですか?「タイトル」、「desc」、「ユーザー名」の子を検索する必要があります。 MainActivityのおかげ

[ランダム文字がhsiukhdufhjwrepjèijgitrjwbnrtnbnbeènbèrnbgnèjwtigogjwitjgbniownttngfnwnpnwpjgnjntwjtngjnjwngjggpnwrjgrngjwpnjnvwpjeenjrvnjpreqngjnpwjgnrjpwnjpn2ngj2nrjnp2r2g2hhuheqdhyg1eydgugf]


更新されたコード:

public class MainActivity extends AppCompatActivity{ 

private RecyclerView mBlogList; 

private DatabaseReference mDatabase; 

private DatabaseReference mDatabaseUsers; 

private DatabaseReference mDatabaseLike; 

private Query mQuery; 

private SearchView mSearchView; 

private FirebaseAuth mAuth; 
private FirebaseAuth.AuthStateListener mAuthListener; 

private boolean mProcessLike = false; 

private TextView badge; 

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

    mAuth = FirebaseAuth.getInstance(); 
    mAuthListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 

      if(firebaseAuth.getCurrentUser() == null){ 


       Intent loginIntent = new Intent(MainActivity.this, LoginActivity.class); 
       loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(loginIntent); 

      } 

     } 
    }; 


    mDatabase = FirebaseDatabase.getInstance().getReference().child("Blog"); 
    mDatabaseUsers = FirebaseDatabase.getInstance().getReference().child("Users"); 
    mDatabaseLike = FirebaseDatabase.getInstance().getReference().child("Likes"); 

    mDatabaseUsers.keepSynced(true); 
    mDatabaseLike.keepSynced(true); 
    mDatabase.keepSynced(true); 

    mBlogList = (RecyclerView) findViewById(R.id.blog_list); 

    LinearLayoutManager layoutManager = new LinearLayoutManager(this); 
    layoutManager.setReverseLayout(true); 
    layoutManager.setStackFromEnd(true); 

    mBlogList.setHasFixedSize(true); 
    mBlogList.setLayoutManager(new LinearLayoutManager(this)); 

    badge = (TextView)findViewById (R.id.badge); 

    } 

@Override 
protected void onStart() { 
    super.onStart(); 

    mAuth.addAuthStateListener(mAuthListener); 

    final FirebaseRecyclerAdapter<Blog, BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Blog, BlogViewHolder>(
      Blog.class, 
      R.layout.blog_row, 
      BlogViewHolder.class, 
      mQuery 

    ) { 
     @Override 
     protected void populateViewHolder(final BlogViewHolder viewHolder, Blog model, int position) { 

      final String post_key = getRef(position).getKey(); 

      viewHolder.setTitle(model.getTitle()); 
      viewHolder.setDesc(model.getDesc()); 
      viewHolder.setImage(getApplicationContext(), model.getImage()); 
      viewHolder.setUsername(model.getUsername()); 

      viewHolder.setLikeBtn(post_key); 

      viewHolder.mView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 

        Intent singleBlogIntent = new Intent(MainActivity.this, BlogSingleActivity.class); 
        singleBlogIntent.putExtra("blog_id", post_key); 
        startActivity(singleBlogIntent); 

       } 
      }); 

      mDatabaseUsers.child(model.getUid()).child("image").addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        String imageUrl = dataSnapshot.getValue().toString(); 
        viewHolder.setUserimage(getApplicationContext(), imageUrl); 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 


      viewHolder.mLikeBtn.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 

        mProcessLike = true; 

        mDatabaseLike.addValueEventListener(new ValueEventListener() { 
         @Override 
         public void onDataChange(DataSnapshot dataSnapshot) { 

          if (mProcessLike) { 

           if (dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())) { 

            mDatabaseLike.child(post_key).child(mAuth.getCurrentUser().getUid()).removeValue(); 

            mProcessLike = false; 

           } else { 

            mDatabaseLike.child(post_key).child(mAuth.getCurrentUser().getUid()).setValue("RandomValue"); 

            mProcessLike = false; 

           } 
          } 
         } 

         @Override 
         public void onCancelled(DatabaseError databaseError) { 

         } 
        }); 
       } 
      }); 
     } 
    }; 

    mBlogList.setAdapter(firebaseRecyclerAdapter); 
} 

private void checkUserExist() { 
    final String user_id = this.mAuth.getCurrentUser().getUid(); 
    this.mDatabaseUsers.addValueEventListener(new ValueEventListener() { 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if (!dataSnapshot.hasChild(user_id)) { 
       Intent setupIntent = new Intent(MainActivity.this, SetupActivity.class); 
       setupIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(setupIntent); 
       MainActivity.this.startActivity(setupIntent); 
      } 

      if (user_id == null){Intent errorIntent = new Intent (MainActivity.this, ErrorActivity.class); 
       errorIntent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(errorIntent); 
       MainActivity.this.startActivity (errorIntent); 
      }} 

     public void onCancelled(DatabaseError databaseError) { 
     } 
    }); 
} 


public static class BlogViewHolder extends RecyclerView.ViewHolder{ 

    View mView; 

    ImageButton mLikeBtn; 

    DatabaseReference mDatabaseLike; 
    FirebaseAuth mAuth; 

    public BlogViewHolder(View itemView) { 
     super(itemView); 

     mView = itemView; 

     mLikeBtn = (ImageButton) mView.findViewById(R.id.like_btn); 

     mDatabaseLike = FirebaseDatabase.getInstance().getReference().child("Likes"); 
     mAuth = FirebaseAuth.getInstance(); 

     mDatabaseLike.keepSynced(true); 




    } 

    public void setUserimage(Context context, String imageUrl) { 
     ImageView imageViewPostUserImage = (ImageView) mView.findViewById(R.id.imageview_post_userimage); 
     Glide 
       .with(context) 
       .load(imageUrl) 
       .into(imageViewPostUserImage); 
    } 

    public void setLikeBtn(final String post_key) { 

     mDatabaseLike.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

       if (dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())) { 

        mLikeBtn.setImageResource(R.mipmap.ic_thumb_up_black_24dp); 

       } else { 

        mLikeBtn.setImageResource(R.mipmap.ic_thumb_up_white_24dp); 

       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

    } 



    public void setTitle(String title){ 

     TextView post_title = (TextView) mView.findViewById(R.id.post_title); 
     post_title.setText(title); 
    } 

    public void setDesc(String desc){ 

     TextView post_desc = (TextView) mView.findViewById(R.id.post_desc); 
     post_desc.setText(desc); 

    } 

    public void setUsername(String username){ 

     TextView post_username = (TextView) mView.findViewById(R.id.post_username); 
     post_username.setText(username); 

    } 

    public void setImage(Context ctx, String image){ 

     ImageView post_image = (ImageView) mView.findViewById(R.id.post_image); 
     Picasso.with(ctx).load(image).into(post_image); 
    } 



} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    getMenuInflater().inflate(R.menu.main_menu, menu); 

    SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search)); 

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 

      Intent searchIntent = new Intent(MainActivity.this, searchActivity.class); 
      searchIntent.putExtra("search", query); 
      startActivity(searchIntent); 
      return false; 

     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      //?????? 
      return true; 
     } 
    }); 

    return super.onCreateOptionsMenu(menu); 



} 


@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    if(item.getItemId() == R.id.action_add){ 

     startActivity(new Intent(MainActivity.this, PostActivity.class)); 

    } 

    if (item.getItemId() == R.id.action_logout){ 

     logout(); 

    } 

    return super.onOptionsItemSelected(item); 
} 

private void logout() { 

    mAuth.signOut(); 

} 

}


searchActivity

public class searchActivity extends AppCompatActivity{ 

private RecyclerView mBlogList; 

private DatabaseReference mDatabase; 

private DatabaseReference mDatabaseUsers; 

private DatabaseReference mDatabaseLike; 

private Query mQuery; 

private Query mQuerySearch; 

private SearchView mSearchView; 

private FirebaseAuth mAuth; 
private FirebaseAuth.AuthStateListener mAuthListener; 

private boolean mProcessLike = false; 

private TextView badge; 

private String search; 

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

    mAuth = FirebaseAuth.getInstance(); 
    mAuthListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 

      if(firebaseAuth.getCurrentUser() == null){ 


       Intent loginIntent = new Intent(com.fgvelectro.f.searchActivity.this, LoginActivity.class); 
       loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(loginIntent); 

      } 

     } 
    }; 


    mDatabase = FirebaseDatabase.getInstance().getReference().child("Blog"); 
    search = getIntent().getExtras().getString("search"); 
    mQuerySearch = mDatabase.orderByChild("title").equalTo(search); 
    mAuth.addAuthStateListener(mAuthListener); 

    mDatabaseUsers = FirebaseDatabase.getInstance().getReference().child("Users"); 
    mDatabaseLike = FirebaseDatabase.getInstance().getReference().child("Likes"); 

    mDatabaseUsers.keepSynced(true); 
    mDatabaseLike.keepSynced(true); 
    mDatabase.keepSynced(true); 

    mQuery = mDatabase.orderByChild("title").equalTo("try1"); 

    mBlogList = (RecyclerView) findViewById(R.id.blog_list); 

    LinearLayoutManager layoutManager = new LinearLayoutManager(this); 
    layoutManager.setReverseLayout(true); 
    layoutManager.setStackFromEnd(true); 

    mBlogList.setHasFixedSize(true); 
    mBlogList.setLayoutManager(new LinearLayoutManager(this)); 

    badge = (TextView)findViewById (R.id.badge); 

} 

@Override 
protected void onStart() { 
    super.onStart(); 

    FirebaseRecyclerAdapter<Blog, searchActivity.BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Blog, BlogViewHolder>(

      Blog.class, 
      R.layout.blog_row, 
      searchActivity.BlogViewHolder.class, 
      mQuerySearch 

    ) { 
     @Override 
     protected void populateViewHolder(BlogViewHolder viewHolder, Blog model, int position) { 

     } 

     protected void populateViewHolder(final com.fgvelectro.f.MainActivity.BlogViewHolder viewHolder, Blog model, int position) { 

      final String post_key = getRef(position).getKey(); 

      viewHolder.setTitle(model.getTitle()); 
      viewHolder.setDesc(model.getDesc()); 
      viewHolder.setImage(getApplicationContext(), model.getImage()); 
      viewHolder.setUsername(model.getUsername()); 

      viewHolder.setLikeBtn(post_key); 

      viewHolder.mView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 

        Intent singleBlogIntent = new Intent(com.fgvelectro.f.searchActivity.this, BlogSingleActivity.class); 
        singleBlogIntent.putExtra("blog_id", post_key); 
        startActivity(singleBlogIntent); 

       } 
      }); 

      mDatabaseUsers.child(model.getUid()).child("image").addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        String imageUrl = dataSnapshot.getValue().toString(); 
        viewHolder.setUserimage(getApplicationContext(), imageUrl); 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 


      viewHolder.mLikeBtn.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 

        mProcessLike = true; 

        mDatabaseLike.addValueEventListener(new ValueEventListener() { 
         @Override 
         public void onDataChange(DataSnapshot dataSnapshot) { 

          if (mProcessLike) { 

           if (dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())) { 

            mDatabaseLike.child(post_key).child(mAuth.getCurrentUser().getUid()).removeValue(); 

            mProcessLike = false; 

           } else { 

            mDatabaseLike.child(post_key).child(mAuth.getCurrentUser().getUid()).setValue("RandomValue"); 

            mProcessLike = false; 

           } 
          } 
         } 

         @Override 
         public void onCancelled(DatabaseError databaseError) { 

         } 
        }); 
       } 
      }); 
     } 
    }; 

    mBlogList.setAdapter(firebaseRecyclerAdapter); 
} 

private void checkUserExist() { 
    final String user_id = this.mAuth.getCurrentUser().getUid(); 
    this.mDatabaseUsers.addValueEventListener(new ValueEventListener() { 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if (!dataSnapshot.hasChild(user_id)) { 
       Intent setupIntent = new Intent(com.fgvelectro.f.searchActivity.this, SetupActivity.class); 
       setupIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(setupIntent); 
       com.fgvelectro.f.searchActivity.this.startActivity(setupIntent); 
      } 

      if (user_id == null){Intent errorIntent = new Intent (com.fgvelectro.f.searchActivity.this, ErrorActivity.class); 
       errorIntent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(errorIntent); 
       com.fgvelectro.f.searchActivity.this.startActivity (errorIntent); 
      }} 

     public void onCancelled(DatabaseError databaseError) { 
     } 
    }); 
} 


public static class BlogViewHolder extends RecyclerView.ViewHolder{ 

    View mView; 

    ImageButton mLikeBtn; 

    DatabaseReference mDatabaseLike; 
    FirebaseAuth mAuth; 

    public BlogViewHolder(View itemView) { 
     super(itemView); 

     mView = itemView; 

     mLikeBtn = (ImageButton) mView.findViewById(R.id.like_btn); 

     mDatabaseLike = FirebaseDatabase.getInstance().getReference().child("Likes"); 
     mAuth = FirebaseAuth.getInstance(); 

     mDatabaseLike.keepSynced(true); 




    } 

    public void setUserimage(Context context, String imageUrl) { 
     ImageView imageViewPostUserImage = (ImageView) mView.findViewById(R.id.imageview_post_userimage); 
     Glide 
       .with(context) 
       .load(imageUrl) 
       .into(imageViewPostUserImage); 
    } 

    public void setLikeBtn(final String post_key) { 

     mDatabaseLike.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

       if (dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())) { 

        mLikeBtn.setImageResource(R.mipmap.ic_thumb_up_black_24dp); 

       } else { 

        mLikeBtn.setImageResource(R.mipmap.ic_thumb_up_white_24dp); 

       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

    } 



    public void setTitle(String title){ 

     TextView post_title = (TextView) mView.findViewById(R.id.post_title); 
     post_title.setText(title); 
    } 

    public void setDesc(String desc){ 

     TextView post_desc = (TextView) mView.findViewById(R.id.post_desc); 
     post_desc.setText(desc); 

    } 

    public void setUsername(String username){ 

     TextView post_username = (TextView) mView.findViewById(R.id.post_username); 
     post_username.setText(username); 

    } 

    public void setImage(Context ctx, String image){ 

     ImageView post_image = (ImageView) mView.findViewById(R.id.post_image); 
     Picasso.with(ctx).load(image).into(post_image); 
    } 



} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    getMenuInflater().inflate(R.menu.main_menu, menu); 

    SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search)); 

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 

      Intent searchIntent = new Intent(com.fgvelectro.f.searchActivity.this, searchActivity.class); 
      searchIntent.putExtra("search", query); 
      startActivity(searchIntent); 
      return false; 

     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      //?????? 
      return true; 
     } 
    }); 

    return super.onCreateOptionsMenu(menu); 



} 


@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    if(item.getItemId() == R.id.action_add){ 

     startActivity(new Intent(com.fgvelectro.f.searchActivity.this, PostActivity.class)); 

    } 

    if (item.getItemId() == R.id.action_logout){ 

     logout(); 

    } 

    return super.onOptionsItemSelected(item); 
} 

private void logout() { 

    mAuth.signOut(); 

} 

} 写真:Of the error

答えて

0

まず、あなたがあなたのデータベースを照会する必要があり、たとえば

mQuery = mDatabase.orderByChild("Title").equalTo("your value")は、あなたのfirebaseRecyclerAdapterに行くと置き換える:

FirebaseRecyclerAdapter<Blog, BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Blog, BlogViewHolder>(
      Blog.class, 
      R.layout.blog_row, 
      BlogViewHolder.class, 
      mDatabase 

    ) 

と:

とFirebaseUIのマニュアルを:https://github.com/firebase/FirebaseUI-Android

これは私がやったことです:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     getMenuInflater().inflate(R.menu.main_menu, menu); 

     SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search)); 

     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String query) { 

       Intent searchIntent = new Intent(MainActivity.this, searchActivity.class); 
       searchIntent.putExtra("search", query); 
       startActivity(searchIntent); 
       return false; 

      } 

      @Override 
      public boolean onQueryTextChange(String newText) { 
       //?????? 
       return true; 
      } 
     }); 

     return super.onCreateOptionsMenu(menu); 



    } 

と検索活動に:

より多くのあなたがここにドキュメントをチェックすることができます見つけるために

String search = getIntent().getExtras().getString("search"); 
mQuerySearch = mDatabase.orderByChild("name").equalTo(search); 

FirebaseRecyclerAdapter<Classified, searchActivity.ClassifiedViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Classified, searchActivity.ClassifiedViewHolder>(

       Classified.class, 
       R.layout.classified_row, 
       searchActivity.ClassifiedViewHolder.class, 
       mQuerySearch 

     ) 
+0

コメントは、拡張された議論やデバッグのためのものではありません。 gingセッション;この会話は[チャットに移動]されています(http://chat.stackoverflow.com/rooms/153455/discussion-on-answer-by-jean-eric-android-how-to-filter-the-recyclerview-of- fi)。質問を更新する必要がある場合は、編集してください。フォローアップの質問がある場合は、新しい質問をして、この質問にリンクして文脈を提供してください。 –

関連する問題