如何根据所选项目更改 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 );