2016-06-22 11 views
3

Ich möchte das jeweilige Bild des angeklickten Elements in der Recycler-Ansicht ändern. Nun, was geschieht, wenn ich auf 2 Bildpunkt klicken in der Liste an Zufallsgenerator Position zu verändernSo ändern Sie ein bestimmtes Bild in der Recycler-Ansicht nach dem Klicken auf

public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.DataObjectHolder> { 

private static String LOG_TAG = "MyRecyclerViewAdapter"; 
private ArrayList<CRMbean> mDataset; 
private static MyClickListener myClickListener; 
static Context mContext; 
private List<String> mtList ; 


public MyRecyclerViewAdapter(List<String> filteredList, CRMactivity crMactivity) { 
    mtList = filteredList; 

} 

public static class DataObjectHolder extends RecyclerView.ViewHolder 
     implements View 
     .OnClickListener { 
    public static ImageView testImage; 
    TextView name; 
    TextView regId; 
    TextView roomNo; 

    public DataObjectHolder(View itemView) { 
     super(itemView); 
     name = (TextView) itemView.findViewById(R.id.name); 
     regId = (TextView)itemView.findViewById(R.id.reg_id); 
     roomNo = (TextView)itemView.findViewById(R.id.roomno); 
     testImage = (ImageView)itemView.findViewById(R.id.logo); 


     Log.i(LOG_TAG, "Adding Listener"); 
     itemView.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     myClickListener.onItemClick(getAdapterPosition(), v); 

    } 
} 
public void setOnItemClickListener(MyClickListener myClickListener) { 
    MyRecyclerViewAdapter.myClickListener = myClickListener; 
} 
public MyRecyclerViewAdapter(ArrayList<CRMbean> myDataset) { 
    mDataset = myDataset; 
} 





@Override 
public MyRecyclerViewAdapter.DataObjectHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    View view = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.card_view_row, parent, false); 

    DataObjectHolder dataObjectHolder = new DataObjectHolder(view); 
    return dataObjectHolder; 
} 

@Override 
public void onBindViewHolder(MyRecyclerViewAdapter.DataObjectHolder holder, int position) { 
    holder.name.setText(mDataset.get(position).getName()); 
    holder.regId.setText(mDataset.get(position).getRegId()); 
    holder.roomNo.setText(mDataset.get(position).getRoomNo()); 

} 

public void addItem(CRMbean dataObj, int index) { 
    mDataset.add(index, dataObj); 
    notifyItemInserted(index); 
} 

public void deleteItem(int index) { 
    mDataset.remove(index); 
    notifyItemRemoved(index); 
} 

@Override 
public int getItemCount() { 
    return mDataset.size(); 
} 


public interface MyClickListener { 
    void onItemClick(int position, View v); 
} 

}

die oben ist für Adpater von recyclerview

((MyRecyclerViewAdapter) mAdapter).setOnItemClickListener 
      (new MyRecyclerViewAdapter.MyClickListener() { 
       @Override 
       public void onItemClick(int position, View v) { 
        Log.i(LOG_TAG, " Clicked on Item " + position); 

        MyRecyclerViewAdapter.DataObjectHolder.testImage.setImageResource(R.drawable.video_icon_fill); 
        //getInformation(position); 

       } 
      }); 

der obige Code ist für OnclickListener

+0

(MyRecyclerViewAdapter.DataObjectHolder.testImage.setImageResource (R.drawable.video_icon_fill);) Anstatt dies zu tun, ändern Sie mtList.get (Position) Element und ändern Sie es und rufen Sie die Methode notifydatasetchanged() des Adapters auf. –

Antwort

5

dies versuchen,

class CRMbean{ 
    public boolean isImageChanged; 
    public boolean isImageChanged() { 
     return isImageChanged; 
    } 

    public void setImageChanged(boolean imageChanged) { 
     isImageChanged = imageChanged; 
    } 
} 

Auf BindHolder es gefällt,

@Override 
public void onBindViewHolder(MyRecyclerViewAdapter.DataObjectHolder holder, int position) { 
    holder.name.setText(mDataset.get(position).getName()); 
    holder.regId.setText(mDataset.get(position).getRegId()); 
    holder.roomNo.setText(mDataset.get(position).getRoomNo()); 
if(mDataset.get(position).isImageChanged()){ 
    holder.testImage.setImageResource(R.drawable.video_icon_fill); 
}else{ 
    holder.testImage.setImageResource("You Default Image"); 
} 
} 

auf Adapter diese Methode schreiben

public void changeImage(int index) { 
mDataset.get(position).setImageChanged(true); 
    notifyItemChanged(index) 

} 

auf Artikel klicken Recyleview

(MyRecyclerViewAdapter) mAdapter).setOnItemClickListener 
      (new MyRecyclerViewAdapter.MyClickListener() { 
       @Override 
       public void onItemClick(int position, View v) { 
        Log.i(LOG_TAG, " Clicked on Item " + position); 

       MyRecyclerViewAdapter.changeImage(position); 

       } 
      }); 
1

Ändern Sie den Bildwert im Objekt an der angeklickten Position und Rufen Sie notifyItemChanged(position) .Auch behandeln th e Bildwechsel in Bindviewholder(ViewHolder holder,position) Methode des Adapters.

+0

nicht. Bild ändert sich immer noch an zufälliger Position nach onClick –

+0

Wenn ich auf item2 Bild klicken ändert sich bei item6 –

+0

@venkateshgowda hast du es geschafft, dies zu lösen? plz antworten so schnell wie möglich –

0

in onBindViewHolder add folgenden Code:

testImage.setTag (Halter);

dann in onClick fügen Sie diesen Code Bild zu ändern:

MyRecyclerViewAdapter.DataObjectHolder yourHolderObj = (MyRecyclerViewAdapter.DataObjectHolder)((ImageView)itemView.findViewById(R.id.logo)).getTag(); 

yourHolderObj.testImage.setImageResource(R.drawable.video_icon_fill); 
+0

nein. Bild ändert sich immer noch an zufälliger Position nach onClick –

+0

Wenn ich klicke auf item2 Bild ändert sich bei item6 –

+0

setzen Sie Ihren onclick listner in onBindViewHolder auf äußerste Elternteil Layout Ihrer Ansicht. –

0

Versuchen Sie folgendes:

@Override 
public void onBindViewHolder(MyRecyclerViewAdapter.DataObjectHolder holder,int position { 

holder.name.setText(mDataset.get(position).getName()); 
holder.regId.setText(mDataset.get(position).getRegId()); 
holder.roomNo.setText(mDataset.get(position).getRoomNo()); 
holder.testImage = (ImageView)itemView.findViewById(R.id.log) 
holder.testImage.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) { 
     name.setImageResource(Anything you want); 


} 
Verwandte Themen