如何检查已单击哪个RecyclerView

时间:2019-05-26 17:00:43

标签: java android android-recyclerview

我有两个RecyclerViews的视图。它们具有不同的ArrayList,但具有相同的适配器。在我的活动中的OnClick方法中,我想获取Recyclers中哪个被单击,然后选择该项目。

我尝试使用view instanceof RecylcerView,但是并没有解决问题。

4 个答案:

答案 0 :(得分:1)

您可以将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,则其父对象是第一个RecyclerView。 如果是RelativeLayout,则其父级是第二个RecyclerView。

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

答案 1 :(得分:0)

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

MainActivity

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

     if(view.id == R.id.recyclerView1I){
         //Do stuff
     }

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

答案 2 :(得分:0)

我认为您正在寻找的只是在其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)

答案 3 :(得分:0)

我终于设法弄清楚了。它比大多数答案更简单,因为它们都通过活动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;
        }
}