如何将OnClickListener实现为内部子动态创建的RecyclerView?

时间:2016-04-20 08:48:02

标签: android android-recyclerview onclicklistener recycler-adapter

我对片段中的项目进行了根再循环查看。单击recyclelerview中的每个项目,它会使用与根再循环视图相同的适配器生成动态回收站视图列表。我想为子recyclelerview实现OnClick监听器,并使用第二级recyclelerview生成下一级别的项目。我找了很多答案,但我找到的是为根项目实现的点击监听器。我在我的适配器中的viewholder中实现了我的监听器。

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

}

1 个答案:

答案 0 :(得分: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);
    }
}