簡體   English   中英

如何更新“回收站”視圖?

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

我有一個回收站視圖作為父級,並且在其中有一個回收站視圖。 當我從子回收者視圖中選擇一行時,我想更新所有父回收者視圖的行。

在父回收者視圖中它具有兩個textview和一個回收者視圖。 父回收者視圖的增加類和適配器類如下所示。

   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) {

        }
    }));
}

適配器類別:

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

父回收者視圖的模型類:

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

我的孩子回收者視圖適配器類是:

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

而孩子的模型課是:

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

單擊子視圖中的任何行時,我無法檢索父回收者視圖的位置。請幫助。

您可以通過將其傳遞給Adapter構造器來獲得對您的父RecyclerView的引用。

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

然后,您可以使用回收站父引用及其方法來檢索所需的所有內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM