如何在 RecyclerView 适配器中添加 switch 语句?
how to add a switch statement in a RecyclerView adapter?
我有一个带有一些图像的 RecyclerView,在这里我想通过点击不同的图像来打开不同的 Activity...
所以,我认为在适配器的 onClick 中使用 switch 语句可以解决我的问题,但我不知道如何在 RecyclerView 中添加 switch-if 语句 adapter.i 我是 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();
}
}}
所以我想要的是:
如果用户单击猫图像,我想打开不同的活动,它应该打开一个名为 activity 的猫,如果用户单击狗图像,它应该打开一个名为 activity 的狗...
@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
};
}
Returns the Adapter position of the item represented by this ViewHolder.
我对 Java 的经验很少,我只用 Kotlin 编写。这是我想出的。
在 Adapter 本身内设置点击事件并不是最好的方法 practise.According 您应该添加 回调方法 并让 Activity
\ Fragment
Recycler
在点击事件后附加句柄。
如何进行,
第 1 步:创建一个 Interface
,将您的 Adapter
松散地绑定到 Activity
或 Fragment
。
interface AdapterListener{
void afterAdapterItemClicked(int adapterPosition);
}
此 Interface
可以在 Adapter
本身内创建为内部成员。
第 2 步:让附加 Recycler
的 Activity
或 Fragment
实现此 Interface
,因此假设您的 Activity
被命名为作为 MenuActivity
class MenuActivity extends Activity implements AdapterListener{
}
第 3 步:现在在 Activity
/ Fragment
中实现覆盖方法
@Override
void afterAdapterItemClicked(int adapterPosition){
switch(adapterPosition) {
case 0: // Move to activity1
break;
case 1: // Move to activity2
break;
}
}
第 4 步:现在在单击事件后调用方法 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());
}
}
第 5 步:现在所有好奇的面孔都在想,世界上哪里 mListener
着陆了,别担心,我把它留到最后了。
现在,当您在 Activity
/ Fragment
中创建 RecyclerAdapter
对象(实例)时,您需要在其构造函数中传递当前上下文或 this
。
RecyclerAdapter(arrayOfImages,this);
现在在 RecyclerAdapter
class 中创建一个新的状态变量,例如
private AdapterListener mListener;
然后在RecyclerAdapter
的构造函数中你需要添加一个类型的变量
AdapterListener
像这样,然后将接收到的值赋给 mListener
public RecyclerAdapter(int[] images,AdapterListener mListener){
this.images = images;
this.mListener = mListener;
}
然后在你的内部 class ImageViewHolder
.
中使用 mListener
我有一个带有一些图像的 RecyclerView,在这里我想通过点击不同的图像来打开不同的 Activity... 所以,我认为在适配器的 onClick 中使用 switch 语句可以解决我的问题,但我不知道如何在 RecyclerView 中添加 switch-if 语句 adapter.i 我是 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();
}
}}
所以我想要的是: 如果用户单击猫图像,我想打开不同的活动,它应该打开一个名为 activity 的猫,如果用户单击狗图像,它应该打开一个名为 activity 的狗...
@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
};
}
Returns the Adapter position of the item represented by this ViewHolder.
我对 Java 的经验很少,我只用 Kotlin 编写。这是我想出的。
在 Adapter 本身内设置点击事件并不是最好的方法 practise.According 您应该添加 回调方法 并让 Activity
\ Fragment
Recycler
在点击事件后附加句柄。
如何进行,
第 1 步:创建一个 Interface
,将您的 Adapter
松散地绑定到 Activity
或 Fragment
。
interface AdapterListener{
void afterAdapterItemClicked(int adapterPosition);
}
此 Interface
可以在 Adapter
本身内创建为内部成员。
第 2 步:让附加 Recycler
的 Activity
或 Fragment
实现此 Interface
,因此假设您的 Activity
被命名为作为 MenuActivity
class MenuActivity extends Activity implements AdapterListener{
}
第 3 步:现在在 Activity
/ Fragment
中实现覆盖方法
@Override
void afterAdapterItemClicked(int adapterPosition){
switch(adapterPosition) {
case 0: // Move to activity1
break;
case 1: // Move to activity2
break;
}
}
第 4 步:现在在单击事件后调用方法 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());
}
}
第 5 步:现在所有好奇的面孔都在想,世界上哪里 mListener
着陆了,别担心,我把它留到最后了。
现在,当您在 Activity
/ Fragment
中创建 RecyclerAdapter
对象(实例)时,您需要在其构造函数中传递当前上下文或 this
。
RecyclerAdapter(arrayOfImages,this);
现在在 RecyclerAdapter
class 中创建一个新的状态变量,例如
private AdapterListener mListener;
然后在RecyclerAdapter
的构造函数中你需要添加一个类型的变量
AdapterListener
像这样,然后将接收到的值赋给 mListener
public RecyclerAdapter(int[] images,AdapterListener mListener){
this.images = images;
this.mListener = mListener;
}
然后在你的内部 class ImageViewHolder
.
mListener