0

I am showing some data from Firebase database in my android project, but when I am clicking on that item nothing is triggering I mean click is no working

This is my Activity

public class Notification extends AppCompatActivity {
    private RecyclerView mPeopleRV;
    private DatabaseReference mDatabase;
    private FirebaseRecyclerAdapter<News, Notification.NewsViewHolder> mPeopleRVAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mDatabase = FirebaseDatabase.getInstance().getReference().child("XXXXXXXXXXX");
        mDatabase.keepSynced(true);
        mPeopleRV = (RecyclerView) findViewById(R.id.myRecycleView);
        DatabaseReference personsRef = FirebaseDatabase.getInstance().getReference().child("XXXXXXXXXXX");
        Query personsQuery = personsRef.orderByChild("date");
        mPeopleRV.hasFixedSize();
        LinearLayoutManager mLayoutManager = new LinearLayoutManager(Notification.this);
        mLayoutManager.setReverseLayout(true);
        mLayoutManager.setStackFromEnd(true);
        mPeopleRV.setLayoutManager(mLayoutManager);
        FirebaseRecyclerOptions personsOptions = new FirebaseRecyclerOptions.Builder<News>().setQuery(personsQuery, News.class).build();
        mPeopleRVAdapter = new FirebaseRecyclerAdapter<News, NewsViewHolder>(personsOptions) {
            @Override
            protected void onBindViewHolder(Notification.NewsViewHolder holder, final int position, final News model) {
                holder.setTitle(capitalize(model.getName()));
                //this click is not working 
                holder.mView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                         String pos =  mPeopleRVAdapter.getRef(position).getKey();
                        Toast.makeText(getApplicationContext(), "dsdsdsd", Toast.LENGTH_SHORT).show();
                    }
                });
            }
        };
        mPeopleRV.setAdapter(mPeopleRVAdapter);
    }
    @Override
    public void onStart() {
        super.onStart();
        mPeopleRVAdapter.startListening();
    }
    @Override
    public void onStop() {
        super.onStop();
        mPeopleRVAdapter.stopListening();
    }
    public static class NewsViewHolder extends RecyclerView.ViewHolder {
        View mView;
        public NewsViewHolder(View itemView) {
            super(itemView);
            mView = itemView;
        }
        public void setTitle(String title) {
            String output = title.substring(0, 1).toUpperCase() + title.substring(1);
            TextView post_title = (TextView) mView.findViewById(R.id.post_title);
            post_title.setText(output);
        }
    }
}

What is wrong in above code I cannot find, I am trying to fix this from last 4,5 hours also I need key of that firebase child object when that item is clicked

Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
sam999
  • 115
  • 1
  • 13
  • Hello Sam. Take a look to this question, maybe that code can help you. https://stackoverflow.com/questions/38263336/firebase-ui-recyclerview-onclick – Juanjo Berenguer Sep 03 '18 at 10:25
  • i already saw that actually i am new to android i can't find the what was missing so could you please tell me what changes i need to make in my code to work as i am expecting? – sam999 Sep 03 '18 at 10:29
  • If you are interested, **[this](https://stackoverflow.com/questions/49383687/how-can-i-retrieve-data-from-firebase-to-my-adapter/49384849)** is a recommended way in which you can retrieve data from a Firebase Realtime database and display it in a `RecyclerView` using `FirebaseRecyclerAdapter`. – Alex Mamo Sep 03 '18 at 12:42

1 Answers1

0

I've been checking some example codes and i think you are missing to create the onCreateViewHolder method the item layout to the adapter.

Code:

DatabaseReference personsRef = FirebaseDatabase.getInstance().getReference().child("XXXXXXXXXXX");

        FirebaseRecyclerOptions personsOptions = new FirebaseRecyclerOptions.Builder<News>().setQuery(personsQuery, News.class).build();

        mPeopleRVAdapter = new FirebaseRecyclerAdapter<News, NewsViewHolder>(personsOptions) {
            //I think you are missing this part.
            @Override
            public NewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.item_message, parent, false);

                return new NewsViewHolder(view);
            }

            @Override
            protected void onBindViewHolder(Notification.NewsViewHolder holder, final int position, final News model) {
                holder.setTitle(capitalize(model.getName()));
                //this click is not working
                holder.mView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String pos =  mPeopleRVAdapter.getRef(position).getKey();
                        Toast.makeText(getApplicationContext(), "dsdsdsd", Toast.LENGTH_SHORT).show();
                    }
                });
            }
        };

I hope it helps you.

Juanjo Berenguer
  • 789
  • 1
  • 5
  • 8
  • "item_message" what is this – sam999 Sep 03 '18 at 10:50
  • any id or layout ? – sam999 Sep 03 '18 at 10:51
  • item message is the layout to represent your items, you need create a layout with the content that you want show. in your case you need a layout with your post title – Juanjo Berenguer Sep 03 '18 at 10:52
  • yes i have that layout and when i put name of that layout in place of "item_message" there is another error > onCreateViewHolder(ViewGroup, int)' is already defined in 'Anonymous class derived from com.firebase.ui.database.FirebaseRecyclerAdapter – sam999 Sep 03 '18 at 10:55
  • I can't reply the whole code at my computer, take a look to this solution: Your code need looks similar https://stackoverflow.com/questions/46859983/i-cant-find-populateviewholder-method-in-firebaserecycleradapter-class – Juanjo Berenguer Sep 03 '18 at 11:01