2016-01-27 14 views
5

Ho un RecyclerView, che ha un pulsante e un EditText. Ho un pulsante all'esterno di RecyclerView. Al clic sul pulsante esterno, voglio che il pulsante in RecyclerView commuta tra nascondere e mostrare. Come si fa?come modificare il layout di un elemento di recyclerview dall'esterno?

Ho provato a inviare un parametro booleano mEditFlag a recyclerAdapter, a toogle mEditFlag, e notificare all'adattatore che i dati sono cambiati. ma non funziona.

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); 

} 
+0

Vi preghiamo di mostrare che cosa hai provato . –

risposta

7

Devi raggiungerlo con il tuo livello adattatore.

Il Button fuori della RecyclerViewdeve aggiornare l'elemento interno l'adattatore (per esempio un booleano).
Poi comunicare il cambiamento di aggiornare (ad esempio con il metodo notifyItemChanged) il somenthing RecyclerView

come:

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); 
     } 
    }); 

con un adattatore simile:

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); 
     } 

    } 
+0

Funziona come un fascino. Quello che faccio è impostare mEditFlag all'interno dell'adattatore per renderlo pubblico, cambiarlo all'esterno dell'adattatore e notificare l'aggiornamento dell'adattatore. Il codice è: public boolean mEditFlag = false; mCurrentOrderRecyclerAdapter.mEditFlag = mEditFlag; mCurrentOrderRecyclerAdapter.notifyDataSetChanged(); –

Problemi correlati