0

У меня есть root recycliewiew элементов во фрагменте. Onclick каждого элемента в recyclerview, он создает динамический список recyclerview с использованием того же адаптера, что и root recyclerview. Я хочу реализовать прослушиватель OnClick для recyclerview для детей и сгенерировать следующий уровень элементов с повторным просмотром второго уровня. Я искал много ответов, но то, что я нахожу, - это прослушиватель кликов, реализованный для корневых элементов. Я внедрил своего слушателя в качестве зрителя в своем адаптере.Как реализовать OnClickListener для внутреннего дочернего динамически созданного RecyclerView?

public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ItemViewHolder>{  
private Context context; 
private List<ItemgroupDb> itemgroupDbs; 
private ItemgroupDb PItemID; 
private RecyclerViewClickListener itemListener; 

public ItemAdapter(Context context, List<ItemgroupDb> itemgroupDbs, RecyclerViewClickListener itemListener) { 
    this.context = context; 
    this.itemgroupDbs = itemgroupDbs; 
    this.itemListener = itemListener; 
} 

public ItemAdapter(Context context, List<ItemgroupDb> itemgroupDbs) { 
    this.context = context; 
    this.itemgroupDbs = itemgroupDbs; 
} 

public ItemAdapter(Context context, List<ItemgroupDb> itemgroupDbs, ItemgroupDb PItemID, RecyclerViewClickListener itemListener) { 
    this.context = context; 
    this.itemgroupDbs = itemgroupDbs; 
    this.PItemID = PItemID; 
    this.itemListener = itemListener; 
} 

@Override 
public int getItemViewType(int position) { 
    return super.getItemViewType(position); 
} 

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

@Override 
public void onBindViewHolder(ItemAdapter.ItemViewHolder itemViewHolder, int i) { 
    ItemgroupDb itemgroupDb = itemgroupDbs.get(i); 
    itemViewHolder.vName.setText(itemgroupDb.getItemName()); 
    Log.e("Itemname", String.valueOf(itemgroupDb.getItemName())); 
} 

@Override 
public ItemViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 
    View itemView = LayoutInflater. 
      from(viewGroup.getContext()). 
      inflate(R.layout.child3_row, viewGroup, false); 
    return new ItemViewHolder(itemView); 
} 

public class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

    protected TextView vName; 
    protected ImageView vImage; 

    public ItemViewHolder(View v) { 
     super(v); 
     vName = (TextView) v.findViewById(R.id.childname); 
     vImage=(ImageView)v.findViewById(R.id.iv_item_image); 
     v.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     itemListener.recyclerViewListClicked(v, 1, this.getLayoutPosition(), itemgroupDbs.get(this.getLayoutPosition()).getLevel()); 
     notifyDataSetChanged(); 
    } 
} 

Интерфейс для clicklistener

public interface RecyclerViewClickListener { 
public void recyclerViewListClicked(View v, int id, int level, int position); 

}

+0

Начать свой код здесь –

+0

@AdnanAmjad вот мой код. –

ответ

0

Вы можете попробовать этот

public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ItemViewHolder>{ 

    public static class ViewHolder extends RecyclerView.ViewHolder { 

     //your other views 
     private View parentView; 

     public ViewHolder(View v) { 
      super(v); 
      parentView = v; 
     } 

     public View getParentView(){ 
      return parentView; 
     } 
    } 

    @Override 
    public void onBindViewHolder(final ViewHolder vh, final int position) { 
     View.OnClickListener anOnClickListener = new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       aMethodThatAddNewRecyclerViewDynamicallyToThisRecyclerView(); 
      } 
     }; 
     vh.getParentView().setOnClickListener(anOnClickListener); 
    } 
} 
+0

Thankyou, но когда я использую этот метод, щелчок реагирует только на первый элемент recyclerview, а не на другие recyclerview. Есть ли другие способы –

Смежные вопросы