android - 我们如何为回收器视图的每个列表项(每一行)设置 onClickListener,为不同的列表对象设置不同的活动
问题描述
我需要为每个列表项设置OnClickListenerrecycler view
。
我想通过单击每个列表视图项导航到不同的活动。
到目前为止,我已经设法通过回调将点击位置传递给 then 列表中每个点击项目的相同活动。但是,我想在单击列表中的项目时开始不同的活动。
假设我要单击具有文本“dd”的行,然后它应该转到名为“abc”的活动
请帮我。请。
这是主要活动:
public class MainActivity extends AppCompatActivity implements WordAdapter.OnNoteListener {
private RecyclerView recyclerView;
private static final String TAG = MainActivity.class.getCanonicalName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.home_view);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
List<Word> wordList = new ArrayList<>();
wordList.add(new Word(R.drawable.ic_launcher_background, "dd"));
wordList.add(new Word(R.drawable.ic_launcher_background, "ss"));
wordList.add(new Word(R.drawable.ic_launcher_background, "cc"));
WordAdapter adapter = new WordAdapter(this);
recyclerView.setAdapter(adapter);
adapter.addItems(wordList);
}
@Override
public void onNoteClick(int position) {
Log.d(TAG, "clicked on the position:" + position);
Intent intent = new Intent(this, abc.class);
this.startActivity(intent);
}
}
这是名为 WordAdapter 的适配器:
public class WordAdapter extends RecyclerView.Adapter<WordAdapter.ViewHolder> {
private List<Word> wordList;
private OnNoteListener mOnNoteListener;
public WordAdapter(List<Word> wordList, OnNoteListener onNoteListener) {
this.wordList = wordList;
this.mOnNoteListener = onNoteListener;
}
public WordAdapter(OnNoteListener onNoteListener) {
this(new ArrayList<Word>(), onNoteListener);
}
public void addItems(List<Word> items) {
wordList.addAll(items);
notifyDataSetChanged();
}
public void clear() {
wordList.clear();
notifyDataSetChanged();
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_items, viewGroup, false);
return new ViewHolder(view, mOnNoteListener);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewholder, int position) {
int resource = wordList.get(position).getImageResource();
String title = wordList.get(position).getTitle();
viewholder.setData(resource, title);
}
@Override
public int getItemCount() {
return wordList.size();
}
static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private ImageView imageView;
private TextView title;
private OnNoteListener onNoteListener;
public ViewHolder(@NonNull View itemView, OnNoteListener onNoteListener) {
super(itemView);
imageView = itemView.findViewById(R.id.imageView);
title = itemView.findViewById(R.id.word);
this.onNoteListener = onNoteListener;
itemView.setOnClickListener(this);
}
private void setData(int resource, String titleText) {
imageView.setImageResource(resource);
title.setText(titleText);
}
@Override
public void onClick(View view) {
onNoteListener.onNoteClick(getAdapterPosition());
}
}
public interface OnNoteListener {
void onNoteClick(int position);
}
}
解决方案
您的Adapter
班级将有您interface
喜欢的内容:
public class AdapterClass extends RecyclerView.Adapter<AdapterClass.Viewholder>{
private OnItemClick onItemClick;
public NotificationAdapter(Context context) {
onItemClick = (OnItemClick)context;
}
public interface OnItemClick {
void onClick(int position);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
holder.layout.setOnClickListener(v -> {
onItemClick.onClick(position);
});
}
}
现在你Activity
将实现这个接口,如下所示:
public class MainActivity extends AppCompatActivity implements AdapterClass.OnItemClick {
@Override
public void onClick(int position) {
Log.d(TAG, "clicked on the position:" + position);
startNewActivity(position);
}
private void startNewActivity(int position){
Intent intent = new Intent(MainActivity.this, NewActivity.class);
//Pass your data here if required
intent.putExtra("key_for_data", position);
startActivity(intent);
}
}
推荐阅读
- c# - 将每个记录的 int 列值更改为 1 会引发重复错误
- c++ - 如何在 C++ 中从 git 设置外部库
- reactjs - 类组件内的反应功能组件,是一个有效的组件吗?有什么区别?
- php - Woocommerce REST api - 401 代码 ajax 身份验证
- c# - 如何修复“无法从 'TouchTracking.TouchTrackingPoint' 转换为 'Xamarin.Forms.Point'”?
- c# - c#:忽略参数异常/使我的代码工作的方法或技巧
- java - 如何更改 Kotlin 中 RecyclerView 中每个偶数值元素的颜色?
- ruby-on-rails - Errno::EACCES: 权限被拒绝 @ rb_sysopen - /app/db/schema.rb
- php - 拉取图像时使用 docker compose 设置环境变量
- python - 从 pd 数据框 Python 创建嵌套字典