2017-07-12 13 views
0

私は1つのリサイクルビューを親として持ち、内部にリサイクルビューを持っています。子リサイクラビューから行を選択するときに、親リサイクラビューの行をすべて更新したいとします。Recyclerビューの更新方法Recyclerビューの内部?

親リサイクラビューでは、2つのテキストビューと1つのリサイクルビューがあります。親リサイクラー・ビューのクラスおよびアダプター・クラスの増加を以下に示します。

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

親RecyclerViewへの参照は、アダプタコンストラクタに渡すことで取得できます。

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

次に、あなたが

を必要とするすべてを取得するために、リサイクルの親参照と彼のメソッドを使用することができます
関連する問題