我有两个RecyclerViews。 RecyclerView A和RecyclerView B.每个项目 RecyclerView A包含RecyclerView B和TextView。那就是RecyclerView B是RecyclerView A的孩子。
如何更新RecyclerView A中每个项目中按钮上的RecyclerView A中TextView的值。 TextView属于RecyclerView A的项目。
答案 0 :(得分:1)
在recyclerView2适配器中使用..并声明.. libvtkGUISupportQt5
;在 recylerView 2适配器中的活动和public static RecyclerViewAdapterOne reyclerViewAdapOne = ...
按钮中使用onClick()
,在 RecyclerViewAdapterOne 中添加此功能..
Activity.reyclerViewAdapOne.updateValue(newText);
答案 1 :(得分:1)
您必须在RecyclerView A的onBindViewHolder内充气RecuclerView B,只有您可以在RecyclerViewB适配器中传递特定RecyclerViewA的孩子的位置。我假设您可以访问RecyclerView A的LayoutManager和RecyclerView实例。
RecyclerViewA的onBindViewHolder:
@Override
public void onBindViewHolder(final ViewHolder holder, int positionInRecyclerViewA) {
RecyclerViewAdapterB adapterB = new RecyclerViewAdapterB(positionInRecyclerViewA);
holder.recyclerViewB.setAdapter(adapterB);
}
RecyclerViewB onBindViewHolder:
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.button.setOnClickListener(new OnClickListener(){
public void onClick(View view) {
onButtonClick();
}
}
}
private void onButtonClick() {
if (positionInRecyclerViewA >= linearLayoutManagerA.findFirstVisibleItemPosition() &&
positionInRecyclerViewA <= linearLayoutManagerA.findLastVisibleItemPosition()) {
Adapter.ViewHolder holder = (Adapter.ViewHolder) recyclerViewA
.findViewHolderForAdapterPosition(positionInRecyclerViewA);
holder.textView.setText("text");
}
}
更新您的列表,以便下次滚动它时会有最新数据。
答案 2 :(得分:0)
接收您的活动/片段中的按钮点击或您喜欢的点击听众。更改保存文本的资源(通常在您设置为适配器的数据集中,每个项目应该知道要显示的文本)。在RecyclerView A上调用notifyDataSetChanged()。
答案 3 :(得分:0)
使用EventBus,发布事件并在主要活动上订阅它并通知适配器
答案 4 :(得分:0)
将两个适配器放在一个类中。将父位置和RecyclerViewB列表从RecyclerViewA适配器发送到RecyclerViewB Adapter。然后从RecyclerViewB适配器通知RecyclerViewA。
父模型:
public class ExampleModel {
public int text = 0;
public List<Button> child_lst;
}
在您的活动中:
public class TestActivity extends AppCompatActivity {
RecyclerView recyclerView_A;
List<ExampleModel> parent_lst;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
recyclerView_A.setLayoutManager(new LinearLayoutManager(this));
recyclerView_A.setAdapter(new AAdapter());
}
public class AAdapter extends RecyclerView.Adapter <AAdapter.Aviewholder> {
@Override
public void onBindViewHolder(Aviewholder holder, int position) {
ExampleModel em = parent_lst.get(position);
holder.textView.setText(em.text+"");
holder.recyclerView_b.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
holder.recyclerView_b.setAdapter(new BAdapter(em.child_lst,position));
}
@Override
public int getItemCount()
{
return parent_lst.size();
}
}
public class BAdapter extends RecyclerView.Adapter <BAdapter.Bviewholder> {
List<Button> child_lst;
int parent_position;
public BAdapter(List<Button> child_lst,int parent_position){
this.child_lst = child_lst;
this.parent_position = parent_position;
}
@Override
public void onBindViewHolder(Bviewholder holder, int position) {
holder.btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
parent_lst.get(parent_position).text += 1;
recyclerView_A.getAdapter().notifyItemChanged(parent_position);
}
});
}
@Override
public int getItemCount()
{
return child_lst.size();
}
}
}