如何在RecyclerView中使用字符串?

时间:2018-04-29 01:39:19

标签: java android android-layout android-studio android-fragments

我试图为String中的每个项目使用不同的RecyclerView,但我的计划始终采用第一个String我放入ArrayList,无论我点击哪个项目:

   @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, final int viewType) {
       final View v = LayoutInflater.from(mContext).inflate(R.layout.cardview, null);
        final ContentMain contentMain = mData.get(viewType);

              v.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {

                        Toast.makeText(v.getContext(), contentMain.getMyContent(),
                                Toast.LENGTH_LONG).show();
                    }
             }    

        ViewHolder vHolder = new ViewHolder(v);
        return vHolder;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        final ContentMain contentMain = mData.get(position);
        holder.myContent= mData.get(position).getMyContent();
}

2 个答案:

答案 0 :(得分:0)

您不应该绑定onClickListener中的onCreateViewHolderonCreateViewHolder的目的是构造ViewHolder而不是绑定信息。

关注onCreateViewHolder中的代码:

final ContentMain contentMain = mData.get(viewType);

将始终返回第一个元素,因为您的viewType为0。它没有描述这个位置。

将此代码移至onBindViewHolder,如下所示:

  @Override
  public void onBindViewHolder(final ViewHolder holder, final int position) {
        final ContentMain contentMain = mData.get(position);
        holder.myContent= mData.get(position).getMyContent();

        holder.itemView.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                Toast.makeText(v.getContext(), contentMain.getMyContent(),Toast.LENGTH_LONG).show();
             }
        });    
 }

答案 1 :(得分:0)

onClick() 中获取数据。

您在创建position时使用ViewHolder获取数据。它会给出错误的position,因为recyclerview必须计算布局测量 -

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int position) {

    final View v = LayoutInflater.from(mContext).inflate(R.layout.cardview, parent, false); //Avoid inflate layout with null parent


    v.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            final ContentMain contentMain = mData.get(getAdapterPosition());
            Toast.makeText(v.getContext(), contentMain.getMyContent(), Toast.LENGTH_LONG).show();
        }
    }    

    ViewHolder vHolder = new ViewHolder(v);
    return vHolder;
}

修改

您可能应该在ViewHolder -

中定义点击侦听器
public static ViewHolder extends RecyclerView.ViewHolder {
    public ViewHolder(View v) {
        v.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Do you stuffs here...
            }
        }
    }
}