[英]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.