简体   繁体   English

如何更新“回收站”视图?

[英]How to update a Recycler view Inside Recycler view?

I have one recycler View as a parent and a recycler view inside it. 我有一个回收站视图作为父级,并且在其中有一个回收站视图。 I want to update all of my parent recycler view's rows, when I am selecting a row from child recycler view. 当我从子回收者视图中选择一行时,我想更新所有父回收者视图的行。

In parent recycler view It have two textviews and one recycler view. 在父回收者视图中它具有两个textview和一个回收者视图。 The increase class and adapter class for parent recycler view is shown below. 父回收者视图的增加类和适配器类如下所示。

   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    rv = (RecyclerView)findViewById(R.id.reviews);


    LinearLayoutManager mLinearLayoutManager = new LinearLayoutManager(this);
    rv.setLayoutManager(mLinearLayoutManager);
    Data();
     adapter = new Adapterclass(countryList,MainActivity.this);

    rv.setAdapter(adapter);
    rv.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(),rv,new ClickListener(){
        @Override
        public void onClick(View view, int position) {

            Log.e("position child",""+position);

            adapter = new Adapterclass(position);

        }

        @Override
        public void onLongClick(View view, int position) {

        }
    }));
}

Adapter class : 适配器类别:

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

private List<ModelMain> flist;
private List<Modelclass>carList;
Context c;
boolean set = false;
int positn;

public class MyViewHolder extends RecyclerView.ViewHolder {


    TextView text,currency;

    RecyclerView recycler;
    public MyViewHolder(View view) {
        super(view);
        text = (TextView)view.findViewById(R.id.gggg);
        currency= (TextView)view.findViewById(R.id.hhh);
        recycler = (RecyclerView)view.findViewById(R.id.rview2);

    }

}
public  Adapterclass(List<ModelMain> slist, Context c){
    this.flist = slist;
    this.c = c;
}

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

@Override
public void onBindViewHolder(Adapterclass.MyViewHolder holder, final int position) {
    ModelMain fm = flist.get(position);

    holder.text.setText(fm.getName());
    holder.currency.setText(fm.getCurrency());

    carList = new ArrayList<>();
    carList = fm.getArrays();
    Log.d("list",""+carList.toString());
    LinearLayoutManager mLinearLayoutManager = new LinearLayoutManager(c);
    holder.recycler.setLayoutManager(mLinearLayoutManager);

    final Adapter_Inside adapter = new Adapter_Inside(carList,c);

    holder.recycler.setAdapter(adapter);

    holder.recycler.addOnItemTouchListener(new RecyclerTouchListener(c,holder.recycler,new ClickListener(){
        @Override
        public void onClick(View view, int pos) {
            ModelMain mm = flist.get(positn);

            carList = new ArrayList<>();
            carList = mm.getArrays();
            Modelclass mv = carList.get(pos);
            Log.e("valll", "" + carList.get(pos).getVal());

            Boolean bool = carList.get(pos).getVal();
            if(bool){

            }else{
                for(int i =0; i<carList.size();i++){
                    Modelclass cls = new Modelclass();
                 Boolean v = carList.get(i).getVal();
                    String text = carList.get(i).getText();
                    if(v){
                        cls.setVal(false);
                        cls.setText(text);

                        carList.set(i,cls);
                    }
                }
                mv.setVal(true);
                set  = true;
            }
            adapter.notifyDataSetChanged();


            }
       @Override
        public void onLongClick(View view, int position) {

        }
    }));


}
  public Adapterclass(int pos){
      this.positn = pos;


}
private void SetAdapr() {

    notifyDataSetChanged();
}

public interface ClickListener {
    void onClick(View view, int position);

    void onLongClick(View view, int position);
}
public static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener {

    private GestureDetector gestureDetector;
    private ClickListener clickListener;


    public RecyclerTouchListener(Context applicationContext, final RecyclerView rv, final ClickListener clickListener) {
        this.clickListener = clickListener;
        gestureDetector = new GestureDetector(applicationContext, new GestureDetector.SimpleOnGestureListener() {
            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                return true;
            }

            @Override
            public void onLongPress(MotionEvent e) {
                View child = rv.findChildViewUnder(e.getX(), e.getY());
                if (child != null && clickListener != null) {
                    clickListener.onLongClick(child, rv.getChildPosition(child));

                }
            }
        });
    }


    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
        View child = rv.findChildViewUnder(e.getX(), e.getY());
        if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) {
            clickListener.onClick(child, rv.getChildPosition(child));
        }
        return false;
    }

    @Override
    public void onTouchEvent(RecyclerView rv, MotionEvent e) {

    }

    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }

}
@Override
public int getItemCount() {
    return flist.size();
}

Model class for parent recycler view : 父回收者视图的模型类:

public class ModelMain {
String name;
String currency;
List<Modelclass> arrays ;

public ModelMain(String name, String currency, List<Modelclass> arrays) {
    this.name = name;
    this.currency = currency;
    this.arrays = arrays;
}

public String getName() {

    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getCurrency() {
    return currency;
}

public void setCurrency(String currency) {
    this.currency = currency;
}

public List<Modelclass> getArrays() {
    return arrays;
}

public void setArrays(List<Modelclass> arrays) {
    this.arrays = arrays;
}
}

And my child recycler view adapter class is : 我的孩子回收者视图适配器类是:

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

  private List<Modelclass>carList;
    Context c;
    public class MyViewHolder extends RecyclerView.ViewHolder {


    TextView text;
    ImageView iv;


    public MyViewHolder(View view) {
        super(view);
        text = (TextView)view.findViewById(R.id.textView);
       iv = (ImageView)view.findViewById(R.id.iview);


    }

    }
public  Adapter_Inside(List<Modelclass> slist, Context c){
    this.carList = slist;
    this.c = c;
}

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

@Override
public void onBindViewHolder(Adapter_Inside.MyViewHolder holder, int position) {
    Modelclass fm = carList.get(position);

    holder.text.setText(fm.getText());
 if(fm.getVal()){
       holder.iv.setImageResource(R.drawable.ic_clear_black_18dp);
   }
    else{
       holder.iv.setImageResource(R.drawable.ic_done_black_16dp_2x);
   }
  }

@Override
public int getItemCount() {
    return carList.size();
}
}

And model class for child is : 而孩子的模型课是:

public class Modelclass {

Boolean val;
String text;

public Boolean getVal() {
    return val;
}

public void setVal(Boolean val) {
    this.val = val;
}

public String getText() {
    return text;
}

public void setText(String text) {
    this.text = text;
}
}

I couldn't retrieve parent recycler view's position when clicking any row in the child view.please help. 单击子视图中的任何行时,我无法检索父回收者视图的位置。请帮助。

You can get reference to your parent RecyclerView by passing it in the Adapter contructor. 您可以通过将其传递给Adapter构造器来获得对您的父RecyclerView的引用。

public  Adapterclass(RecyclerView parent, List<ModelMain> slist, Context c){
   this.flist = slist;
   this.c = c;
   this.recyclerView = parent;
}

Then you can use recycler parent reference and his methods to retrieve all you need 然后,您可以使用回收站父引用及其方法来检索所需的所有内容

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM