How to change the structure of recyclerview elements from the outside?

I have a RecyclerView that has a button and an EditText. I have a button outside of RecyclerView. By clicking the β€œExternal button” button, I want the button in the RecyclerView to switch between hide and show. How to do it?

I tried to send the boolean parameter mEditFlag to recyclerAdapter, toogle mEditFlag and notify the adapter about data changes. but it does not work.

mCurrentOrderRecyclerAdapter = new CurrentOrderRecyclerAdapter(this, mEditFlag); rvOrder.setAdapter(mCurrentOrderRecyclerAdapter); rlEditOrderList.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mEditFlag = !mEditFlag; mCurrentOrderRecyclerAdapter.notifyDataSetChanged(); if (mEditFlag) { ivEditOrderList.setImageResource(R.drawable.order_edit_true); tvEditOrderList.setText(R.string.order_edit_flag_true); } else { ivEditOrderList.setImageResource(R.drawable.order_edit_false); tvEditOrderList.setText(R.string.order_edit_flag_false); } } }); @Override public void onBindViewHolder(OrderRecyclerViewHolder holder, final int position) { if(editFlag) { holder.rlLeftItemRvOrder.setVisibility(View.VISIBLE); } else { holder.rlLeftItemRvOrder.setVisibility(View.GONE); } holder.tvNumItemRvOrder.setText(position + "x"); holder.tvDesItemRvOrder.setText("holder.ivFoodItemRvOrder.setImageResource(R.drawable.drawer_menu)"); holder.ivFoodItemRvOrder.setImageResource(R.drawable.drawer_menu); } 
+5
source share
1 answer

You must achieve this with an adapter layer.

Button outside the RecyclerView should update the element inside the adapter (for example, boolean).
Then notify the change to update (for example, using the notifyItemChanged method) RecyclerView

Feel like:

 rlEditOrderList.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Update the item inside the adapter MyObject obj = mAdapter.getItem(position); obj.myBoolean= true; mAdapter.notifyItemChanged(position); } }); 

with adapter, for example:

  public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private ArrayList<MyObject> mDataset; @Override public void onBindViewHolder(ViewHolder holder, int position) { //Get the item in the adapter MyObject obj = getItem(position); if(obj.myBoolean) holder.mButtonView.setVisibile(View.VISIBLE); else holder.mButtonView.setVisibile(View.GONE); } } 
+7
source

Source: https://habr.com/ru/post/1241650/


All Articles