为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查点击了哪个RecyclerView

如何检查点击了哪个RecyclerView

青春有我 2022-12-15 16:30:46
我有两个观点RecyclerViews。它们有不同的 ArrayLists,但适配器类型相同。在我的活动中的 OnClick 方法中,我想获取Recyclers已单击的项目,然后选择项目。我尝试使用view instanceof RecylcerView但没有成功。
查看完整描述

4 回答

?
森栏

TA贡献1810条经验 获得超5个赞

您可以将 onClickListener 添加到 relativeLayout 的子布局。


考虑到,第一个 RecyclerView 有一个 LinearLayout,第二个里面有 RelativeLayout(我的意思是我认为 LinearLayout 是第一个 RecyclerView 中单个项目的父布局,而 RelativeLayout 是第二个 RecyclerView 中单个项目的父布局)。


linLayout.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View v) {

        getParentName(v);

    }

});

    relLayout.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View v) {

        getParentName(v);

    }

});

private void getParentName (View v){

    View view = (View) v.getParent();

    switch (view.getId()) {

        case R.id.linLayout:

            Toast.makeText(MainActivity.this, "First One", Toast.LENGTH_SHORT).show();

            break;

        case R.id.relLayout:

            Toast.makeText(MainActivity.this, "Second One", Toast.LENGTH_SHORT).show();

            break;

    }

}

我们知道如果是LinearLayout那么它的parent首先是RecyclerView。如果它是 RelativeLayout 那么它的父级是第二个 RecyclerView。


但是通过使用上述方法,我们可以使各个子视图的根布局具有相同的布局(LinearLayout 或 RelativeLayout),并且可以看到上述功能是否有效。


查看完整回答
反对 回复 2022-12-15
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

我认为您正在寻找的只是onClickListener在RecyclerView其Adapter. 您可以使用接口来完成,在这种情况下您需要创建 2 个接口:


interface clickListenerInFirstRecycler{

void onFirstClick(int position);

}


interface clickListenerInSecondRecycler{

    void onSecondClick(int position);

}

根据您要从项目中检索的信息,只需更改界面中的参数即可。在这种情况下,我将只使用检索项目的位置。


然后在你的Adapter类中创建这些接口的全局变量及其设置方法:


private  clickListenerInFirstRecycler listener;


public void setOnClickListener(clickListenerInFirstRecycler listener){

    this.listener = listener;

}

用第二个接口和适配器做类比。


然后onBindViewHolder调用此变量,在本例listener中为您创建的方法(在第一种情况下为 onFirstClick)并传递适当的参数。在这种情况下,它只是位置:


listener.onFirstClick(position);

然后转到您的活动并让它们实现这些接口。您将需要覆盖接口中的方法,然后您将能够从那里处理来自指定 RecyclerView 的点击和数据。不要忘记调用onCreate或初始化后Adapter设置这些接口: adapter.setOnClickListener(this)


查看完整回答
反对 回复 2022-12-15
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

我终于设法弄清楚了。它比大多数答案更简单,因为它都在活动onClick方法中解决了:


public void onClick(View v){

    ViewParent parent = v.getParent();

        switch (((RecyclerView) parent).getId()) {

            case R.id.recycler_first:

            // Code

            break;

            case R.id.recycler_second:

            // Code

            break;

        }

}


查看完整回答
反对 回复 2022-12-15
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

在您的活动点击侦听器中,您只需要检查哪个视图与 RecyclerView 的行 ID 匹配。


RecyclerView_row.xml


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/recyclerView1I"

android:layout_width="match_parent"

android:layout_height="wrap_content">


   <!---  RecyclerView's other Views -->



</RelativeLayout>

主要活动


override fun onItemClick(view: View, position: Int) {


     if(view.id == R.id.recyclerView1I){

         //Do stuff

     }

假设您已经在适配器中设置了 OnClickListener 接口,这就是您确定单击了哪个 RecyclerView 的方式。我用 Kotlin 写了这个答案,但你应该能够轻松转换为 Java :)


查看完整回答
反对 回复 2022-12-15
  • 4 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号