1

I completed my program to show data. The data will show if the button is clicked. This program is using Firebase and FirebaseRecyclerAdapter. But it doesn't display the data in my RecyclerView. I don't know what is wrong.

I think there is a problem in function KamusViewHolder, but I still don't know what's wrong.

JawaActivity.java

public class JawaActivity extends AppCompatActivity {

    private EditText mSearchField;
    private ImageButton mSearchButton;
    private RecyclerView mResultList;

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

        mKamusDatabase = FirebaseDatabase.getInstance().getReference("Employees");


        mSearchField = (EditText) findViewById(R.id.searchField);
        mSearchButton = (ImageButton) findViewById(R.id.searchButton);

        mResultList = (RecyclerView) findViewById(R.id.resultList);
        mResultList.setHasFixedSize(true);
        mResultList.setLayoutManager(new LinearLayoutManager(this));

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

                String searchText = mSearchField.getText().toString();

                firebaseKamusSearch(searchText);
            }

        });

    }

    private void firebaseKamusSearch(String searchText) {

        Toast.makeText(JawaActivity.this, "Mulai Mencari", Toast.LENGTH_LONG).show();

        Query query = mKamusDatabase.orderByChild("Employees").startAt(searchText).endAt(searchText);

        FirebaseRecyclerOptions<Kamus> options = new FirebaseRecyclerOptions.Builder<Kamus>().setQuery(query, Kamus.class).build();

        FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<Kamus, KamusViewHolder>(options) {
            @Override
            public KamusViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                // Create a new instance of the ViewHolder, in this case we are using a custom
                // layout called R.layout.message for each item
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.teks_jawa, parent, false);

                return new KamusViewHolder(view);
            }

            @Override
            protected void onBindViewHolder(KamusViewHolder holder, int position, Kamus model) {

                holder.Indonesia.setText(model.getIndonesia());
                holder.Kramainggil.setText(model.getKramainggil());
                holder.Kramaalus.setText(model.getKramaalus());
                holder.Ngoko.setText(model.getNgoko());
            }
        };

        mResultList.setAdapter(adapter);
    }

    public class KamusViewHolder extends RecyclerView.ViewHolder{

        View mView;
        TextView Indonesia;
        TextView Kramainggil;
        TextView Kramaalus;
        TextView Ngoko;
        public KamusViewHolder(View itemView)
        {
            super(itemView);
            mView = itemView;
            Indonesia = (TextView) mView.findViewById(R.id.Indonesia);
            Kramainggil = (TextView) mView.findViewById(R.id.Kramainggil);
            Kramaalus = (TextView) mView.findViewById(R.id.Kramaalus);
            Ngoko = (TextView) mView.findViewById(R.id.Ngoko);
        }

    }

}

Kamus.Java

public class Kamus {

public String indonesia;
public String kramaalus;
public String kramainggil;
public String ngoko;

public Kamus(){

}

public Kamus(String indonesia, String kramaalus, String kramainggil, String ngoko) {
    this.indonesia = indonesia;
    this.kramaalus = kramaalus;
    this.kramainggil = kramainggil;
    this.ngoko = ngoko;
}

public String getIndonesia() {
    return indonesia;
}

public void setIndonesia(String indonesia) {
    this.indonesia = indonesia;
}

public String getKramaalus() {
    return kramaalus;
}

public void setKramaalus(String kramaalus) {
    this.kramaalus = kramaalus;
}

public String getKramainggil() {
    return kramainggil;
}

public void setKramainggil(String kramainggil) {
    this.kramainggil = kramainggil;
}

public String getNgoko() {
    return ngoko;
}

public void setNgoko(String ngoko) {
    this.ngoko = ngoko;
}

}

CEO tech4lifeapps
  • 885
  • 1
  • 12
  • 31
  • Its good to have use Customer Adapter which extends FirebaseRecyclerAdapter. so its serialize to abstract data properly and not give any problem to display – Nikunj Patel Jun 07 '18 at 04:34
  • https://inducesmile.com/android/android-firebaseui-with-custom-firebaserecycleradapter-example-tutorial/ – Nikunj Patel Jun 07 '18 at 04:34
  • Possible duplicate of [FirebaseListAdapter not pushing individual items for chat app - Firebase-Ui 3.1](https://stackoverflow.com/questions/47228262/firebaselistadapter-not-pushing-individual-items-for-chat-app-firebase-ui-3-1) – Peter Haddad Jun 07 '18 at 06:24

2 Answers2

0

Please do this

@Override
protected void onStart() {
    super.onStart();
    adapter.startListening();
}

as well in your onStop

@Override
protected void onStop() {
    super.onStop();
    adapter.stopListening();
}

the holder and the bind looks ok , you need to startListening your adapter for changes

Gastón Saillén
  • 12,319
  • 5
  • 67
  • 77
0

Add these to your FirebaseRecyclerAdapter :

            @Override
            public void onDataChanged() {
                // If there is no data, show a view that invites the user to add a message.
            }

also on your activity onResume() and onPause() make sure you are doing yourAdapter.startListening(); and yourAdapter.stopListening(); respectively.

Deep Patel
  • 2,584
  • 2
  • 15
  • 28