Java 如何检查已单击的RecyclerView

Java 如何检查已单击的RecyclerView,java,android,android-recyclerview,Java,Android,Android Recyclerview,我有两个RecyclerViews视图。它们有不同的ArrayList,但适配器类型相同。在“我的活动”中的OnClick方法中,我想获取已单击的回收器中的哪个,然后获取选中的项目 我尝试使用RecylcerView的查看实例,但没有成功。在活动的点击式侦听器中,您只需检查哪个视图与RecyclerView的行Id匹配 RecyclerView_row.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res

我有两个
RecyclerViews
视图。它们有不同的ArrayList,但适配器类型相同。在“我的活动”中的OnClick方法中,我想获取已单击的
回收器中的哪个,然后获取选中的项目


我尝试使用RecylcerView的查看实例,但没有成功。

在活动的点击式侦听器中,您只需检查哪个视图与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>

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

我想你要找的只是在每个
回收视图的
适配器中设置
onClickListener
。您可以通过使用接口来实现,在这种情况下,您需要创建两个接口:

interface clickListenerInFirstRecycler{
void onFirstClick(int position);
}

interface clickListenerInSecondRecycler{
    void onSecondClick(int position);
}
根据要从项中检索的信息,只需更改接口中的参数即可。在本例中,我将仅用于检索项目的位置

然后在
适配器
类中,为这些接口及其setter方法生成全局变量:

private  clickListenerInFirstRecycler listener;

public void setOnClickListener(clickListenerInFirstRecycler listener){
    this.listener = listener;
}
使用第二个接口和适配器进行类似操作

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

listener.onFirstClick(position);
然后转到您的活动,让他们实现这些接口。您将需要重写接口中的方法,从那里您将能够处理来自指定RecyclerView的单击和来自该接口的数据。 不要忘记在创建时调用
或在初始化
适配器后调用
来设置这些接口:

adapter.setOnClickListener(this)

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

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

我们知道,如果它是LinearLayout,那么它的父对象是first RecyclerView。 如果它是RelativeLayout,则其父对象是second 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或RelativeLayout),并查看上述功能是否起作用。

我最终设法解决了这个问题。它比大多数答案更简单,因为它都是在活动
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;
        }
}

您可以共享您的实现吗?如果你从这个答案中得到任何帮助,接受它,这样它就可以帮助其他有类似问题的人。
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;
        }
}