0

So I make a recycler view that retrieves some data from my firebase but I don't know how to get the key-value to pass it in another activity.

I tried to get a tutorial from every but none of them has the same method as me.

Here's my code:

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


        mDatabase = FirebaseDatabase.getInstance().getReference();
        final FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
        uid = firebaseAuth.getUid();

        mRecycler = findViewById(R.id.list_proses);
        mRecycler.setHasFixedSize(true);

        final LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mRecycler.setLayoutManager(layoutManager);

        Query query = getQuery(mDatabase);

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

        mAdapter = new FirebaseRecyclerAdapter<Status, StatusViewHolder>(options) {
            @Override
            public StatusViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                LayoutInflater inflater = LayoutInflater.from(parent.getContext());


                return new StatusViewHolder(inflater.inflate(R.layout.item_status, parent, false));
            }
            @Override
            protected void onBindViewHolder(@NonNull final StatusViewHolder holder, final int position, @NonNull final Status model) {
                holder.binToStatus(model, new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {


                    }
                });
            }
        };

        mAdapter.notifyDataSetChanged();
        mRecycler.setAdapter(mAdapter);

    }

    @Override
    public void onStart() {
        super.onStart();
        if (mAdapter != null) {
            mAdapter.startListening();
        }
    }

    @Override
    public void onStop() {
        super.onStop();
        if (mAdapter != null) {
            mAdapter.stopListening();
        }
    }

    private Query getQuery(DatabaseReference mDatabase) {
        Query query = mDatabase.child("PesanFoto").child(uid);
        return query;
    }
}

As you can see, I have a recycler view with model and MyViewHolder class. but I don't know how to get the position of my recycler view to get the data

MLavoie
  • 9,671
  • 41
  • 36
  • 56
Kevin
  • 21
  • 1

2 Answers2

1

If you want to do that when you click on a specific item of the RecyclerView, you can use ViewHolder.getAdapterPosition, this will get you the adapter position of the item represented by this ViewHolder.

Alex Mamo
  • 130,605
  • 17
  • 163
  • 193
Blackbelt
  • 156,034
  • 29
  • 297
  • 305
0

I will suggest you to use your own recycler view and adapter class and then create a RecyclerItemClickListener class to perform on item click listener

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {

   private OnItemClickListener mListener;

   public interface OnItemClickListener {
       public void onItemClick(View view, int position);

       public void onLongItemClick(View view, int position);
   }

   GestureDetector mGestureDetector;

   public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) {
       mListener = listener;
       mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
           @Override
           public boolean onSingleTapUp(MotionEvent e) {
               return true;
           }

           @Override
           public void onLongPress(MotionEvent e) {
               View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
               if (child != null && mListener != null) {
                   mListener.onLongItemClick(child, recyclerView.getChildAdapterPosition(child));
               }
           }
       });
   }
   @Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
       View childView = view.findChildViewUnder(e.getX(), e.getY());
       if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
           mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
           return true;
       }
       return false;
   }

   @Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { }

   @Override
   public void onRequestDisallowInterceptTouchEvent (boolean disallowIntercept){}
}

and then add clicklistener to your recycler view item

        recycler_view.addOnItemTouchListener(
                new RecyclerItemClickListener(getContext(), recycler_view, new RecyclerItemClickListener.OnItemClickListener() {
                    @Override
                    public void onItemClick(View view, int position) {

//here you are getting the selected position object/data
                        Object object = yourArrayList.get(position);

// you can navigate to next screen then
                        navigateToNextActivityCode();
                    }

                    @Override
                    public void onLongItemClick(View view, int position) {

                    }
                })