我有一个带有一些图像的RecyclerView,在这里我想通过单击不同的图像来打开不同的活动... 因此,我认为在适配器的onClick中使用switch语句可以解决我的问题,但是我不知道如何在RecyclerView adapter中添加switch-if语句。我是android开发的初学者,所以我需要一些帮助。 ..
myadapter.java
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ImageViewHolder> {
@NonNull
private int[] images;
public RecyclerAdapter(int[] images){
this.images =images;
}
@Override
public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_item2,parent,false);
ImageViewHolder imageViewHolder = new ImageViewHolder(view);
return imageViewHolder;
}
@Override
public void onBindViewHolder(@NonNull ImageViewHolder holder, int position) {
int image_id =images[position];
holder.imagess.setImageResource(image_id);
}
@Override
public int getItemCount() {
return images.length;
}
public static class ImageViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
ImageView imagess;
TextView titless;
public ImageViewHolder(View itemView) {
super(itemView);
imagess = itemView.findViewById(R.id.image);
titless = itemView.findViewById(R.id.title);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// Toast.makeText(itemView.getContext(), "DOWNLOAD ANY TORRENT DOWNLOADER AND OPEN", Toast.LENGTH_LONG).show();
}
}}
所以我想要的是: 我想打开不同的活动,如果用户单击cat图像,它应该打开一个名为cats的活动,如果用户单击dog图像,它应该打开一个名为dogs的活动...
答案 0 :(得分:0)
@Override
public void onClick(View v) {
switch(getAdapterPosition()) {
case 0:
Intent intent = new Intent(context, Cat.class);
context.startActivity(intent);
break;
case 1: // Open second activity
};
}
返回此ViewHolder表示的项目的Adapter位置。
我对Java的经验很少,我只用Kotlin编写。这是我想出的。
答案 1 :(得分:0)
在适配器本身内设置点击事件不是最佳做法。根据推荐的方式,您应该添加回调方法,并让Activity
发生点击事件后,附加了Fragment
的\ Recycler
的句柄。
如何进行
第1步:创建一个Interface
,将您的Adapter
绑定到Activity
或Fragment
。
interface AdapterListener{
void afterAdapterItemClicked(int adapterPosition);
}
此Interface
可以在Adapter
本身中作为内部成员创建。
步骤2:让附加了Activity
的{{1}}或Fragment
实现此Recycler
,因此,假设您的Interface
被命名为{ {1}}
Activity
第3步:现在在MenuActivity
/ class MenuActivity extends Activity implements AdapterListener{
}
内部实施替代方法
Activity
步骤4:现在在点击事件之后调用方法Fragment
@Override
void afterAdapterItemClicked(int adapterPosition){
switch(adapterPosition) {
case 0: // Move to activity1
break;
case 1: // Move to activity2
break;
}
}
第5步:现在,所有好奇的面孔都在思考afterAdapterClicked()
降落在哪里,请不要担心我将它保存了下来。
现在,当在 public static class ImageViewHolder extends RecyclerView.ViewHolder
implements View.OnClickListener {
ImageView imagess;
TextView titless;
public ImageViewHolder(View itemView) {
super(itemView);
imagess = itemView.findViewById(R.id.image);
titless = itemView.findViewById(R.id.title);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
mListener.afterAdapterItemClicked(getAdapterPosition());
}
}
/ mListener
内部创建RecyclerAdapter
对象(实例)时,您需要在其构造函数中传递当前上下文或Activity
。
Fragment
现在在this
类中创建一个新的状态变量,例如
RecyclerAdapter(arrayOfImages,this);
然后在RecyclerAdapter
的构造函数中添加一个类型为
private AdapterListener mListener;
像这样,然后为mListener分配接收到的值
RecyclerAdapter
然后在内部类AdapterListener
中使用public RecyclerAdapter(int[] images,AdapterListener mListener){
this.images = images;
this.mListener = mListener;
}
。