I'm trying to show Firebase data in RecyclerView with a SearchBar feature, but when I try in phone, the app does function correctly meaning currently it can be searched but doesn't show Firebase data before search like it filers it before even searching. As suggested by @AlexMamo at StackOverflow, I made my firebaseRecyclerAdapter variable global, erased FirebaseRecyclerAdapter<Penyakit, PenyakitActivity.PenyakitViewHolder>And then added override method of:
But I get error at stopListening line, which says that error: cannot find symbol method stopListening() . Also, I'm trying to add a feature where when you press the RecyclerView, you get more details included (from Firebase of course) (Example of details included: more textview, googlemap stuff).
import android.content.Context;
import android.media.Image;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.Toolbar;
import com.bumptech.glide.Glide;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
public class PenyakitActivity extends AppCompatActivity {
private EditText mSearchField1;
private ImageButton mSearchBtn1;
private RecyclerView mResultList1;
private DatabaseReference mPenyakitDatabaseReference1;
private FirebaseRecyclerAdapter<Penyakit, PenyakitViewHolder> firebaseRecyclerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_penyakit);
mPenyakitDatabaseReference1 = FirebaseDatabase.getInstance().getReference("Penyakit");
mSearchField1 = (EditText) findViewById(R.id.search_field1);
mSearchBtn1 = (ImageButton) findViewById(R.id.search_btn1);
mResultList1 = (RecyclerView) findViewById(R.id.result_list1);
mResultList1.setHasFixedSize(true);
mResultList1.setLayoutManager(new LinearLayoutManager(this));
mSearchBtn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String searchText = mSearchField1.getText().toString();
firebasePenyakitSearch(searchText);
}
});
}
@Override
protected void onStart() {
super.onStart();
firebaseRecyclerAdapter.startListening();
}
@Override
protected void onStop() {
super.onStop();
if(firebaseRecyclerAdapter != null) {
firebaseRecyclerAdapter.stopListening();
}
}
private void firebasePenyakitSearch(String searchText) {
Toast.makeText(PenyakitActivity.this, "Started Search", Toast.LENGTH_LONG).show();
Query firebaseSearchQuery = mPenyakitDatabaseReference1.orderByChild("name").startAt(searchText).endAt(searchText + "\uf8ff");
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Penyakit, PenyakitViewHolder>(
Penyakit.class,
R.layout.list_layout,
PenyakitActivity.PenyakitViewHolder.class,
firebaseSearchQuery
) {
@Override
protected void populateViewHolder(PenyakitActivity.PenyakitViewHolder viewHolder, Penyakit model, int position) {
viewHolder.setDetails(getApplicationContext(), model.getName(), model.getStatus(), model.getImage());
}
};
mResultList1.setAdapter(firebaseRecyclerAdapter);
}
// View Holder Class
public class PenyakitViewHolder extends RecyclerView.ViewHolder {
View mView;
public PenyakitViewHolder(View itemView) {
super(itemView);
mView = itemView;
}
public void setDetails(Context ctx, String userName, String userStatus, String userImage){
TextView user_name = (TextView) mView.findViewById(R.id.name_text);
TextView user_status = (TextView) mView.findViewById(R.id.status_text);
ImageView user_image = (ImageView) mView.findViewById(R.id.profile_image);
user_name.setText(userName);
user_status.setText(userStatus);
Glide.with(ctx).load(userImage).into(user_image);
}
}
}