gpt4 book ai didi

android - 如何从另一个 ViewHolder 中获取对 ViewHolder 的引用? (回收 View )

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:43:40 25 4
gpt4 key购买 nike

我有一个 RecyclerView 和一些 view/card(我们暂时称它为 View ),它们都包含相同的东西,包括我用作分隔栏的 View

我希望能够在当前 View 上方的 view 中更改此分隔栏的属性。所以假设我点击了显示 test3 的卡片,我希望能够设置 test2 view 中的分隔栏的属性.

澄清:

我只需要为我单击的上方(或与此相关的任何其他 View )的 View 引用ViewHolder,仅此而已。我应该怎么做?

enter image description here

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>

最佳答案

不知道为什么我没有早点意识到这一点,但它确实有效。

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

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

然后,在您的 onBindViewHolder() 方法中,您可以像这样访问其他 ViewHolder:

mRecyclerView.getChildAt(holder.getAdapterPosition-1);

您可以将它设置为一个变量,或者直接调用 findViewById() 之类的东西。

显然,您可以在 getChildAt() 语句中手动输入您想要的任何位置,并且您可以使用 findViewById() 查找 View 中的任何对象。

关于android - 如何从另一个 ViewHolder 中获取对 ViewHolder 的引用? (回收 View ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36914255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com