【问题标题】:How to Implement OnClickListener to inner child dynamically created RecyclerView?如何实现 OnClickListener 到内部子动态创建的 RecyclerView?
【发布时间】:2016-04-20 08:48:02
【问题描述】:

我有一个片段中项目的根 recyclerview。点击 recyclerview 中的每个项目,它使用与根 recyclerview 相同的 Adapter 生成一个动态 recyclerview 列表。我想实现子recyclerview的OnClick监听器,并用二级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();
    }
}

点击监听接口

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

}

【问题讨论】:

  • 在这里也发布你的代码
  • @AdnanAmjad 这是我的代码。

标签: android onclicklistener android-recyclerview


【解决方案1】:

你可以试试这个

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

【讨论】:

  • 谢谢,但是当我使用这个方法时,点击只响应recyclerview的第一项而不是其他recyclerviews。还有其他方法吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多