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;
}
}