0

I'm working on Nested Recycleview i have ParentAdopter class and ChildAdopter class as well as two classes for their items Parentitem ChildItem. I know how get the postion of parent but I want to know the child on which parent postion located on. for example if i click on child2 as you see on the shatimage I want Toast say ok you are a child of Parent postion 1 ![sample Image may clear my point ] (https://i.stack.imgur.com/4sT4e.jpg)

Parent Adopter

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

     PostionParentAdopter_Interface get_postionParentAdopter_interface;
      public List<Parent_Item> itemList;

    public ParentItemAdapter(List<Parent_Item> itemList){
        this.itemList = itemList;
    }

    @NonNull
    @Override
    public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view  = LayoutInflater.from(parent.getContext()).inflate(R.layout.message_adopter_parent_item, parent , false);
       

        ItemViewHolder obj=new ItemViewHolder(view);
        return obj;

    }

    @Override
    public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {

        Parent_Item parent_item = itemList.get(position);
      
        holder.parent_tite.setText(parent_item.getText_titel());

            ChildItemAdapter childItemAdapter = new ChildItemAdapter(parent_item.getChildItemList());


            holder.parent_rec.setLayoutManager(new LinearLayoutManager(holder.itemView.getContext()));
            holder.parent_rec.setHasFixedSize(true);
            holder.parent_rec.setAdapter(childItemAdapter);

        holder.parent_rec.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 
 
            notifyItemChanged(holder.getAdapterPosition());


            }
        });
}

Child Adopter

    public class ChildItemAdapter extends RecyclerView.Adapter<ChildItemAdapter.ChildViewHolder> {
 
    private List<ChildItem> ChildItemList;
   
    ChildItemAdapter(List<ChildItem> childItemList)
    {

        this.ChildItemList = childItemList;
    }
 
    @NonNull
    @Override
    public ChildViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
       View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.message_adopter_child_item, parent , false);
        ChildViewHolder obj=new ChildViewHolder(view);
    
        return obj;

    }

    @Override
    public void onBindViewHolder(@NonNull ChildViewHolder holder, int position) {
        ChildItem currentcard=ChildItemList.get(position); 

        
                }
            });

    }

1 Answers1

0

Faced same problem as you did and that's how I solved it. Sorry for a late response, hoping it may help you and others.

Parent Adapter:

        holder.parent_rec.setLayoutManager(new LinearLayoutManager(holder.itemView.getContext()));
        holder.parent_rec.setHasFixedSize(true);
        //Add one line of code here:
        holder.parent_rec.setTag(position);
        holder.parent_rec.setAdapter(childItemAdapter);

Child Adapter:

private List<ChildItem> ChildItemList;
//Add this here:
int parentRecycleViewPosition;

.....your code here

ChildViewHolder obj=new ChildViewHolder(view);
//Add this here:
parentRecycleViewPosition = (int) parent.getTag();

.....your code here

I guess in your onBindViewHolder will be OnClickListener and in your OnClickListener use parentRecycleViewPosition as you wanted.

            //Example(maybe not working one)
        currentcard.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(view.getContext(), "ok you are a child of Parent postion " + parentRecycleViewPosition, Toast.LENGTH_SHORT).show();
            }
        });

Please! If you have anything to add - DO IT! Thank you!

pumawo
  • 11
  • 3