当前位置: 首页 > 知识库问答 >
问题:

如何从另一个ViewWholder内部获得对ViewWholder的引用?(回收视图)

党佐
2023-03-14

我有一个recyclerView和一些视图的/(我们现在把它称为视图),它们都包含相同的东西,包括一个用作分隔条的视图

我希望能够在视图中更改当前分隔条的属性。因此,假设我单击写有test3的卡片,我希望能够设置test2视图中的分隔条的属性。

我只需要对上面的视图的viewholder的引用(或任何其他视图),我单击的视图,仅此而已。我该怎么做呢?

public class StuffManagerAdapter extends RecyclerView.Adapter<StuffManagerAdapter.MyViewHolder> {

    private List<StuffManagerClass> stuffList;
    private Context context;
    private String TAG = "CStA";
    DBHandler dbHandler;
    ArrayList<String> tagArray = new ArrayList<>();
    RecyclerView mRecyclerView;

    public StuffManagerAdapter(List<StuffManagerClass> stuffList, Context context) {
        this.stuffList = stuffList;
        this.context = context;
        dbHandler = DBHandler.getInstance(context);
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView DeviceTV, NameTV, TagTV;
        private ImageButton editButton, deleteButton;
        public ImageView tagWarningImage;
        View view, bottomBar ,cover;

        public MyViewHolder(final View view) {
            super(view);
            this.view = view;
            DeviceTV = (TextView) view.findViewById(R.id.SMVFDeviceTextView);
            // etc., etc.

            editButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // do stuff
                }
            });
            deleteButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // do stuff
                }
            });
        }
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_stuffmanagervariablefragment, parent, false);
        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        final StuffManagerClass sc = stuffList.get(position);

        // Initialize card, set all textviews
        holder.DeviceTV.setText(sc.getDevice());
        holder.NameTV.setText(sc.getName());
        holder.TagTV.setText(sc.getTag());
        sc.setPosition(position);

        
        holder.view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {    
                // This is where I would like to get a reference to the divider bar on the other view/card
            }
        });
    }

    @Override
    public int getItemCount() {
        return stuffList.size();
    }
}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <!-- TextViews and stuff -->

        <View
            android:id="@+id/SMVFDividerBar"
            android:layout_width="match_parent"
            android:layout_height="2dp"
            android:layout_below="@+id/LL2"
            android:layout_centerHorizontal="true"
            android:layout_marginLeft="7dp"
            android:layout_marginRight="7dp"
            android:background="@color/colorPrimaryDark">

    </RelativeLayout>

</FrameLayout>

共有1个答案

禄和宜
2023-03-14

不知道为什么我没早点意识到这一点,但它很管用。

首先,创建一个实例变量(如果这不是实例变量,请纠正我)。

public class StuffManagerAdapter extends 
                    RecyclerView.Adapter<StuffManagerAdapter.MyViewHolder> {

    RecyclerView mRecyclerView;

然后,在OnCreateViewHolder()方法中赋值这个变量,如下所示:

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.thingy, parent, false);
    mRecyclerView = (RecyclerView) parent;
    return new MyViewHolder(itemView);
}
mRecyclerView.getChildAt(holder.getAdapterPosition-1);
 类似资料:
  • 我有一个带有Title/TextView和ViewPager的ViewWholder的RecolyerView。 可以使用ItemTouchHelper擦除RecyclerView中的项。 但如何仅对ViewWholder的一部分禁用它呢?

  • 我想创建一个recyclerview,当它在列表中看到LIQUID作为pid时,它将使用具有自己布局的ViewWholder2。否则,它将使用具有自己布局的viewholder1。 问题是我创建的recyclerview只显示一个ViewWholder。如果位置0 pid为液体,则viewholder为ViewHolder2,即使对于列表上的后续项,pid不再为液体。简而言之,位置0上的pid值将

  • 问题内容: 如何从该模块中获取对模块的引用?另外,如何获得包含该模块的包装的参考? 问题答案:

  • 我在Scrollview中有Recyclerview 现在,滚动时,layoutStaticContent保持固定在顶部

  • 在其他回收器视图中有一个回收器视图。两者都需要垂直滚动。外部回收器视图滚动正常,但内部回收器视图滚动不正常。 这是代码: ViewAdapter如下: 我尝试了以下两种回收商观点,但都无法解决问题 也尝试了这个:

  • 当我尝试运行代码时,我得到以下错误: 错误:(48,36)错误:RecyclerViewAdapter中的OnCreateViewWholder(ViewGroup,int)无法重写适配器中的OnCreateViewWholder(ViewGroup,int)返回类型ViewWholder与MenuItemViewWholder不兼容,其中VH是类型变量:VH扩展类Adapter中声明的ViewW