java - 区分 Recyclerview 点击中的列

标签 java android onclick android-recyclerview

首先,我要感谢那些帮助像我这样的菜鸟开发者的人:p!假设我有一个 Recyclerview,其中每个单元元素都有两个图像。实际上,由于 MyAdapter 中的这个小技巧,我能够找到单击以触发良好事件的单元元素的索引:

@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.model,     parent, false);
    final MyHolder holder = new MyHolder(v);
    v.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            listener.onItemClick(v, holder.getAdapterPosition());
        }
    });
    return holder;
}

然后我在 Activity 中以这种方式开始 Activity :

MyAdapter adapter = new MyAdapter(this, countryCollection.getCountryArray(), new CustomItemClickListener() {
        @Override
        public void onItemClick(View v, int position) {
            //Launch the events
            ArrayList<String> languageCodeArray = countryCollection.getLanguageCodeArray();
            ArrayList<String> countryIdArray = countryCollection.getCountryIdArray();
            if(position >0){
                String languageCode = languageCodeArray.get(position-1);
                String countryId = countryIdArray.get(position-1);
                Intent intent = new Intent(context, LetsSpeakActivity.class);
                intent.putExtra("country_id", countryId);
                intent.putExtra("language_code", languageCode);
                startActivity(intent);
            }
        }
    });
    rv.setAdapter(adapter);

但是我如何区分 RecyclerView 的两个图像以触发良好事件?我一直在寻找如何区分屏幕左侧或右侧的点击,但这显然不是正确的方法!任何帮助都会很高兴,我真的被困住了......

最佳答案

假设您在 MyHolder 类中定义了两个 ImageView,您可以在 Holder 构造函数中为它们设置 OnClickListener :

public class MyHolder extends RecyclerView.ViewHolder {

    public ImageView imageLeft;

    public ImageView imageRight;

    public CustomItemClickListener listenerLeft;

    public CustomItemClickListener listenerRight;

    public MyHolder(View v, CustomItemClickListener listenerLeft, CustomItemClickListener listenerRight) {
        super(v);
        this.listenerLeft = listenerLeft;
        this.listenerRight = listenerRight;
        imageLeft = v.findViewById(R.id.image_left);
        imageRight = v.findViewById(R.id.image_right);

        imageLeft.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                listenerLeft.onItemClick(v, getPosition());
            }
        });

        imageRight.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                listenerRight.onItemClick(v, getPosition());
            }
        });
    }
}

onCreateViewHolder 中注入(inject)两个监听器时:

@Override
public MyAdapter.MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.model, parent, false);
    return new MyHolder(v, mImageLeftListener, mImageRightListener);
}

您可以在 Adapter 构造函数中引入这两个监听器,就像使用 listener

或者,如果您只想传递一个监听器,则可以使用 2 个方法定义您的 CustomItemClickListener 接口(interface)(或者仅使用 1 个方法并附加一个参数来区分所单击的图像):

public interface CustomItemClickListener {
    void onLeftImageClick(View view, int position);
    void onRightImageClick(View view, int position);
}

关于java - 区分 Recyclerview 点击中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44864275/

相关文章:

android - 在 Android 的外部存储中写入文件

Java if/else 与比较字符串

java - 如果 HttpClient.execute() 被中断会发生什么?

java - 如何在文本字段中添加按钮?

android - 具有两个按钮的 ListView 行中的 OnClick 事件

javascript - 单击复选框显示/隐藏两个表

javascript "onclick"事件仅在 Chrome 中失败

java - VisualVM - 线程状态

android - android 是否支持使用 HTML5 视频标签的 RTSP 流?

java - 如何在具有 android.support.v7.widget.CardView 的情况下使用 robolectric 测试 Activity ?