2017-07-12 67 views
0

我有一個回收商查看作爲父母和裏面的回收者視圖。當我從子回收視圖中選擇一行時,我想更新所有父回收視圖的行。如何更新Recycler視圖裏面的Recycler視圖?

在家長回收者視圖中它有兩個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(); 
} 

Model類的父回收觀點:

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

點擊子view.please幫助中的任何一行時,我無法檢索父級回收視圖的位置。

回答

0

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

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

然後你可以使用回收父參考和他的方法來獲取你所需要的

相關問題