首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何查看被点击的RecyclerView

如何查看被点击的RecyclerView
EN

Stack Overflow用户
提问于 2019-05-27 01:00:43
回答 3查看 374关注 0票数 0

我有一个有两个RecyclerViews的视图。它们具有不同的ArrayLists,但适配器类型相同。在我的活动的OnClick方法中,我希望获得哪个Recyclers已被单击,然后选择该项目。

我试着使用view instanceof RecylcerView,但没有起到作用。

EN

回答 3

Stack Overflow用户

发布于 2019-05-27 01:59:52

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

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

代码语言:javascript
复制
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,那么它的父类就是first RecyclerView。如果它是RelativeLayout,那么它的父级就是第二个RecyclerView。

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

票数 1
EN

Stack Overflow用户

发布于 2019-05-27 01:43:47

我想你要找的就是在每个RecyclerViewAdapter中设置onClickListener。您可以使用接口来实现,在这种情况下,您需要创建两个接口:

代码语言:javascript
复制
interface clickListenerInFirstRecycler{
void onFirstClick(int position);
}

interface clickListenerInSecondRecycler{
    void onSecondClick(int position);
}

根据您希望从项中检索哪些信息,只需更改接口中的参数即可。在这种情况下,我将只使用来检索项目的位置。

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

代码语言:javascript
复制
private  clickListenerInFirstRecycler listener;

public void setOnClickListener(clickListenerInFirstRecycler listener){
    this.listener = listener;
}

对第二个接口和适配器进行类似的操作。

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

代码语言:javascript
复制
listener.onFirstClick(position);

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

票数 0
EN

Stack Overflow用户

发布于 2019-05-27 15:42:50

我终于想办法解决这个问题了。它比大多数答案更简单,因为它都是在活动onClick方法中解决的:

代码语言:javascript
复制
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;
        }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56315628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档