4 回答

TA貢獻2019條經驗 獲得超9個贊
您必須在 ExampleAdapter 的 onBindViewHolder 方法內執行此操作。
作為一個例子,你可以這樣做:
@Override
public void onBindViewHolder(@NonNull ExampleViewHolder holder, int position) {
ExampleItem currentItem = mExampleList.get(position);
holder.mImageView.setImageResource(currentItem.getImageResource());
holder.mTextView1.setText(currentItem.getText1());
holder.mTextView2.setText(currentItem.getText2());
holder.mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// your code here
}
});
}
在 onBindViewHolder() 方法內部“邏輯發生”。在那里您可以為每個 RecyclerView 項目設置所有內容。

TA貢獻1828條經驗 獲得超4個贊
此代碼在單擊的每個項目上顯示一個對話框
@NonNull
? ? @Override
? ? public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
? ? ? ? LayoutInflater inflater = LayoutInflater.from(parent.getContext());
? ? ? ? View view = inflater.inflate(R.layout.recycler_item, null);
? ? ? ? final ItemViewHolder viewHolder = new ItemViewHolder(view);
? ? ? ? dialoge = new Dialog(parent.getContext());
? ? ? ? dialoge.setContentView(R.layout.dialog);
? ? ? ? dialoge.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
? ? ? ? viewHolder.container.setOnClickListener(new View.OnClickListener() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void onClick(View view) {
? ? ? ? ? ? ? ? setDialog(dialoge, viewHolder);
? ? ? ? ? ? ? ? dialoge.show();
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? return viewHolder;
? ? }
在方法 setDialog() 中,您可以使用以下方法獲取當前項目位置
final RecyclerItem currentItem = itemList.get(viewHolder.getAdapterPosition());
但我認為最好的做法是考慮使用接口,可以遵循tutorialRecyclerItemOnClickListenerInterface
我希望這可以幫助你
編輯:從 onClickListnere 啟動活動:
Intent?myIntent?=?new?Intent(parent.getContext(),yourActivityName.class); ????????????????myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ????????????????context.startActivity(myIntent);

TA貢獻1826條經驗 獲得超6個贊
您需要創建一個與普通點擊偵聽器類似的界面,但它也有位置作為參數。
public interface RecyclerViewClickListener { void onClick(View view, int position); }
然后你可以在你的適配器中聲明
private final RecyclerViewClickListener listener;
您可以在適配器中創建一個設置器
public void setListner(RecyclerViewClickListener listener){ this.listener=listener; }

TA貢獻1864條經驗 獲得超2個贊
您必須將回調接口添加到適配器中,并將該接口的實例從活動傳遞到適配器構造函數。當您單擊 recyclerview 項的不同 ViewGroup 時調用接口的方法,并且 Activity 中應該有一個實現。你的代碼看起來像這樣
活動
public class ProductPage1 extends AppCompatActivity implements ClickCallback {
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_product_page1);
ArrayList<ExampleItem> exampleList = new ArrayList<>();
exampleList.add(new ExampleItem(R.drawable.mickeymouse, "Line1" , "Line2"));
exampleList.add(new ExampleItem(R.drawable.donalduck, "Line3" , "Line4"));
exampleList.add(new ExampleItem(R.drawable.popey, "Line5" , "Line6"));
exampleList.add(new ExampleItem(R.drawable.mickeymouse, "Line1" , "Line2"));
exampleList.add(new ExampleItem(R.drawable.donalduck, "Line3" , "Line4"));
exampleList.add(new ExampleItem(R.drawable.popey, "Line5" , "Line6"));
exampleList.add(new ExampleItem(R.drawable.mickeymouse, "Line1" , "Line2"));
exampleList.add(new ExampleItem(R.drawable.donalduck, "Line3" , "Line4"));
exampleList.add(new ExampleItem(R.drawable.popey, "Line5" , "Line6"));
exampleList.add(new ExampleItem(R.drawable.mickeymouse, "Line1" , "Line2"));
exampleList.add(new ExampleItem(R.drawable.donalduck, "Line3" , "Line4"));
exampleList.add(new ExampleItem(R.drawable.popey, "Line5" , "Line6"));
mRecyclerView = findViewById(R.id.recyclerView);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(this);
mAdapter = new ExampleAdapter(exampleList);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setAdapter(mAdapter);
}
@Override
onItemClick(int position, View view){
switch(view.getId()){
case R.id.mImageView:
//do your view click events here
break;
case R.id.mImageView2:
//do your view click events here
break;
//so on
}
}
適配器
public class ExampleAdapter extends RecyclerView.Adapter<ExampleAdapter.ExampleViewHolder> {
private ArrayList<ExampleItem> mExampleList;
public static class ExampleViewHolder extends RecyclerView.ViewHolder
{
public ImageView mImageView;
public TextView mTextView1;
public TextView mTextView2;
public Button mButton;
public ExampleViewHolder(@NonNull View itemView,ClickCallback clickCallback) {
super(itemView);
this.clickCallback=clickCallback;
mImageView = itemView.findViewById(R.id.imageView);
mTextView1 = itemView.findViewById(R.id.textView);
mTextView2 = itemView.findViewById(R.id.textView2);
mButton = itemView.findViewById(R.id.mybutton);
}
}
public ExampleAdapter(ArrayList<ExampleItem> exampleList)
{
mExampleList = exampleList;
}
@NonNull
@Override
public ExampleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.example_item, parent, false);
ExampleViewHolder evh = new ExampleViewHolder(v);
return evh;
}
@Override
public void onBindViewHolder(@NonNull ExampleViewHolder holder, int position) {
ExampleItem currentItem = mExampleList.get(position);
holder.mImageView.setImageResource(currentItem.getImageResource());
holder.mTextView1.setText(currentItem.getText1());
holder.mTextView2.setText(currentItem.getText2());
holder.mImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickCallback.onItemClick(position, holder.mImageView);
//and same for other views
}
}
@Override
public int getItemCount() {
return mExampleList.size();
}
public interface ClickCallback{
void onItemClick(int position, View view);
//here you can send the object of the list at the position if you require
//that in activity
}
}
希望你得到答案??鞓肪幋a:)
添加回答
舉報