我有一个RecyclerView
,其中包含view
个/ card
个(暂时称之为视图),它们都包含相同的内容,包括{{1}我用作分隔栏吧。
我希望能够在当前版本之上的View
中更改此分隔栏的属性。所以说我点击显示view
的卡片,我希望能够设置test3
test2
中分隔栏的属性。
我只需要引用view
以查看上面的(或其他任何其他内容)我点击的内容,这就是全部。我该怎么做?
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();
}
}
答案 0 :(得分:8)
不知道为什么我没有早点意识到这一点,但它确实有效。
首先,创建一个实例变量(如果这不是实例变量,请纠正我。)
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()
在视图中找到任何对象。
答案 1 :(得分:0)
如果您也发布了适配器代码,那将很容易,
当你点击某个项目时它会给你它的位置,你也可以通过mItems.getAdapterPosition()+1或-1来处理其他项目
这是简单的例子
在您onClickListerner
的{{1}}中,您需要做的只是
ViewHolder