如何根据所选项目更改 RecyclerView 下方的信息?
How can I change the info below a RecyclerView depending of the item selected?
我正在制作一个水平线性布局的回收站视图,它看起来像这样:
HorizontalRecyclerView
如您所见,在它下面有两个文本视图,我想在用户按下某个项目时用它们填充项目信息。我以前做过两个适配器来显示菜单,这样当你长按项目时会改变它的布局,但它不会改变下面的信息。管理选中项的方式通常是这样使用适配器:
if (holder instanceof AdaptadorProyectosViewHolder) {
((AdaptadorProyectosViewHolder) holder).tv_nombreProyecto.setText(nombreProyecto.toString());
((AdaptadorProyectosViewHolder) holder).tv_nombreClienteProyecto.setText("UN CLIENTE");
//When it's a long click the menu is shown in the place of the item
((AdaptadorProyectosViewHolder) holder).itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
mostrarMenu(position); //showMenu(position)
return true;
}
});
这样做是为了更改项目的布局(显示更多信息、选项等),但我希望信息位于 Recycler View 下方,而不是在项目内部。有什么办法吗?
这是包含 Recycler 视图的片段的 xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Vistas.Proyectos">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_proyectos"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
</LinearLayout>
根据您问题中的一些细节,这里有一个快速解决方案。
将 onClickListener 添加到您的适配器:
public interface OnItemClickListener {
void onItemClick(int position);
}
声明侦听器的变量并将其添加到适配器的构造函数中:
private final OnItemClickListener listener;
public MyAdapter ( List<Item> items , Context context , OnItemClickListener listener ) {
mItems = items;
mContext = context;
this.listener = listener;
}
在 ViewHolder 中,添加 OnClickListener:
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
{
private TextView txt;
public ViewHolder(@NonNull View itemView) {
super(itemView);
itemView.setOnClickListener(this);
txt = itemView.findViewById(R.id.tvItemTitle);
}
@Override
public void onClick(View v)
{
listener.onItemClick(getAdapterPosition());
}
}
将这些添加到适配器后,现在移动到托管 recyclerview 的 activity 或片段并实现您刚刚创建的 onClickListener。在这里,我使用了一个片段:
public class LibraryFragment extends MainActivityFragment implements MyAdapter.OnItemClickListener
将以下内容添加到新实现的方法中:
@Override
public void onItemClick(int position)
{
mtext.setText(mItems.get(position).getName());
}
全部完成。
请注意,mItems
是您的项目列表,mtext
是托管结果的 TextView
!
另外,请注意 getName()
方法是我创建的方法。用您自己的代码替换 mItems、mtext 和 getName!
额外注意:您需要在片段中将侦听器添加到适配器:
adapter = new MyAdapter( mItems , getActivity() , this );
我正在制作一个水平线性布局的回收站视图,它看起来像这样: HorizontalRecyclerView
如您所见,在它下面有两个文本视图,我想在用户按下某个项目时用它们填充项目信息。我以前做过两个适配器来显示菜单,这样当你长按项目时会改变它的布局,但它不会改变下面的信息。管理选中项的方式通常是这样使用适配器:
if (holder instanceof AdaptadorProyectosViewHolder) {
((AdaptadorProyectosViewHolder) holder).tv_nombreProyecto.setText(nombreProyecto.toString());
((AdaptadorProyectosViewHolder) holder).tv_nombreClienteProyecto.setText("UN CLIENTE");
//When it's a long click the menu is shown in the place of the item
((AdaptadorProyectosViewHolder) holder).itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
mostrarMenu(position); //showMenu(position)
return true;
}
});
这样做是为了更改项目的布局(显示更多信息、选项等),但我希望信息位于 Recycler View 下方,而不是在项目内部。有什么办法吗?
这是包含 Recycler 视图的片段的 xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Vistas.Proyectos">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_proyectos"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
</LinearLayout>
根据您问题中的一些细节,这里有一个快速解决方案。 将 onClickListener 添加到您的适配器:
public interface OnItemClickListener {
void onItemClick(int position);
}
声明侦听器的变量并将其添加到适配器的构造函数中:
private final OnItemClickListener listener;
public MyAdapter ( List<Item> items , Context context , OnItemClickListener listener ) {
mItems = items;
mContext = context;
this.listener = listener;
}
在 ViewHolder 中,添加 OnClickListener:
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
{
private TextView txt;
public ViewHolder(@NonNull View itemView) {
super(itemView);
itemView.setOnClickListener(this);
txt = itemView.findViewById(R.id.tvItemTitle);
}
@Override
public void onClick(View v)
{
listener.onItemClick(getAdapterPosition());
}
}
将这些添加到适配器后,现在移动到托管 recyclerview 的 activity 或片段并实现您刚刚创建的 onClickListener。在这里,我使用了一个片段:
public class LibraryFragment extends MainActivityFragment implements MyAdapter.OnItemClickListener
将以下内容添加到新实现的方法中:
@Override
public void onItemClick(int position)
{
mtext.setText(mItems.get(position).getName());
}
全部完成。
请注意,mItems
是您的项目列表,mtext
是托管结果的 TextView
!
另外,请注意 getName()
方法是我创建的方法。用您自己的代码替换 mItems、mtext 和 getName!
额外注意:您需要在片段中将侦听器添加到适配器:
adapter = new MyAdapter( mItems , getActivity() , this );