android - 单击包含 RecyclerView 的 ViewHolder 时如何重定向到另一个活动?
问题描述
我正在使用 aRecyclerView
来显示一些数据。对于每个项目,我都有一个自定义布局,它在一些文本视图旁边保存RecyclerView
:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:layout_width="180dp"
android:layout_height="45dp"
android:id="@+id/recycler_view"/>
//Other text views
</RelativeLayout>
这是我的适配器类:
class UserViewHolder extends RecyclerView.ViewHolder {
View itemView;
RecyclerView recyclerView;
UserViewHolder(View itemView) {
super(itemView);
this.itemView = itemView;
recyclerView = itemView.findViewById(R.id.recycler_view);
}
void bind(User user) {
itemView.setOnClickListener(view -> {
//Move to user Activity
});
UserAdapter adapter = new UserAdapter(user.list);
recyclerView.setAdapter(adapter);
itemView.bringToFront(); //Doesn't work!!!
}
}
我已经设置了整个点击监听器,itemView
所以我可以被重定向到用户的活动。问题是当我单击 中存在的元素时RecyclerView
,我没有被重定向。我试图把它itemView
放在前面,RecyclerView
但没有运气。我应该怎么做,即使我点击了,我也可以被重定向到用户活动RecyclerView
?谢谢!
编辑:
这就是我的 itemView 布局的样子:
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:clickable="true">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
//One TextView
//One ImageView
//One RecyclerView
</RelativeLayout>
</android.support.v7.widget.CardView>
这是它的图像:
解决方案
RecyclerView
很简单,您可以实现一个界面并从可见的活动/片段中使用它,而不是尝试从适配器内导航该新屏幕。
示范
class UserViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
View itemView;
RecyclerView recyclerView;
UserViewHolder(View itemView) {
super(itemView);
this.itemView = itemView;
recyclerView = itemView.findViewById(R.id.recycler_view);
}
@Override
public void onClick(View v) {
if (listener != null)
listener.onItemListClicked(getAdapterPosition());
}
void bind(User user) {
itemView.setOnClickListener(this);
UserAdapter adapter = new UserAdapter(user.list);
recyclerView.setAdapter(adapter);
itemView.bringToFront(); //Doesn't work!!!
}
}
接口应该放在UserViewHolder
类之外。
public interface MyClickListener{
void onItemListClicked(int position);
}
您将在适配器中有一个公共方法,它将设置侦听器
public void setListenerForAdapter(MyClickListener listener) {
this.listener = listener;
}
最后在您的活动中将侦听器设置为适配器
adapter.setListener(/*here you will implement your custom listener and start a new activity / fragment based on which position was clicked*/);
如有任何其他问题,请随时提出。快乐编码!
推荐阅读
- powershell - Azure DevOPS PowerShell 任务输出和输入参数
- python - 在 y 轴上应用对数正态尺度线性回归,在 x 轴上应用概率尺度
- cassandra - 启用密钥创建后禁用 Cassandra TDE
- excel - 在 Excel 中查找仅可见单元格的条件 MAX
- python - 在 Python Pipeline 中使用 FunctionTransformer 将单个函数应用于 y_train
- python - 如何从滚动网络表格中抓取特定的单词?
- django - AUTHENTICATION_BACKENDS 是 Django 3 的 settings.py 中的默认设置吗?
- xamarin.forms - Xamarin.Forms 将 TapGestureRecognizer 事件传播到父级
- linux-kernel - 内核无法在 linux android 10 内核版本 4.9 的 initramfs 中运行 /init
- html - 我可以在系统范围内阻止来自流行网站的 HTML 元素吗?