从子RecyclerView更新父RecyclerView中的值

时间:2018-02-19 09:59:08

标签: android android-recyclerview

我有两个RecyclerViews。 RecyclerView A和RecyclerView B.每个项目 RecyclerView A包含RecyclerView B和TextView。那就是RecyclerView B是RecyclerView A的孩子。

如何更新RecyclerView A中每个项目中按钮上的RecyclerView A中TextView的值。 TextView属于RecyclerView A的项目。  enter image description here

5 个答案:

答案 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();
        }

    }

}