【问题标题】:recyclerview adapter anonymous arraylist errorrecyclerview适配器匿名arraylist错误
【发布时间】:2016-02-14 00:27:53
【问题描述】:

我有两个错误,你能帮我解决它们吗?

主要活动中的此错误

这是代码

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recycler_view);

        //first recycler

        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setLayoutManager(
                new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL, false));

        OkHttpHandler handler = new OkHttpHandler( this, new OkHttpHandler.MyInterface() {
            @Override
            public void myMethod(ArrayList result) {
                mAdapter = new MyAdapter(result,this);
                mAdapter.notifyDataSetChanged();
                mRecyclerView.setAdapter(mAdapter);

                // GridViewAdapter adapter = new GridViewAdapter(getApplicationContext(), R.layout.grid_item_layout, result);
                // adapter.notifyDataSetChanged();
                // mGridView.setAdapter(adapter);
            }
        });

我的适配器中出现第二个错误

    //  viewHolder.txtHeader.setText(...)
    final Listitem item;

  //  final String name = mDataset.get(position);
    item = mDataset.get(position);
    viewHolder.txtHeader.setText(mDataset.get(position));

这是完整的代码

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private ArrayList<Listitem> mDataset;
    Context mContext;
    public class ImageViewHolder extends RecyclerView.ViewHolder {
        //ImageView mImage;
        public TextView txtHeader;
        public TextView txtFooter;
        public ImageViewHolder(View itemView) {
            super (itemView);
            txtHeader = (TextView) itemView.findViewById(R.id.firstLine);
            txtFooter = (TextView) itemView.findViewById(R.id.secondLine);
        }
    }


    public void add(int position, Listitem item) { //changed from string to listitem

        mDataset.add(position, item);
        notifyItemInserted(position);
    }

    public void remove(String item) {
        int position = mDataset.indexOf(item);
        mDataset.remove(position);
        notifyItemRemoved(position);
    }

    // Provide a suitable constructor (depends on the kind of dataset)
    public MyAdapter(ArrayList<Listitem> myDataset, Context context) {

        mDataset = myDataset;
        mContext = context;

    }

    // Create new views (invoked by the layout manager)
    @Override
    public RecyclerView.ViewHolder  onCreateViewHolder(ViewGroup parent,
                                                       int viewType) {

            // create a new view
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.rowlayout, parent, false);
            // set the view's size, margins, paddings and layout parameters
            ImageViewHolder vh = new ImageViewHolder(v);
            return vh;
        }


    private static final int TYPE_IMAGE = 1;
    private static final int TYPE_GROUP = 2;

    @Override
    public int getItemViewType(int position) {
        // here your custom logic to choose the view type
        return position;
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder TextViewHolder, int position) {



                ImageViewHolder viewHolder = (ImageViewHolder) TextViewHolder;
                //  viewHolder.txtHeader.setText(...)
        final Listitem item;

      //  final String name = mDataset.get(position);
        item = mDataset.get(position);
        viewHolder.txtHeader.setText(mDataset.get(position));
              /*  viewHolder.txtFooter.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        remove(item);
                    }
                });*/

               // viewHolder.txtFooter.setText("Footer: " + mDataset.get(position));

        }


    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return mDataset.size();
    }

}

列表项

public class Listitem implements Parcelable {
    String id;
    //String name;
    String url;

    Listitem (Parcel in){
        this.id = in.readString();
     //   this.name = in.readString();
        this.url = in.readString();
    }

    Listitem( String name,String url) {
        this.id = id;
        this.url = url;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUrl() {
        return url;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.id);
       // dest.writeString(this.name);
        dest.writeString(this.url);

    }

    public static final Parcelable.Creator<Listitem> CREATOR = new Parcelable.Creator<Listitem>() {
        public Listitem createFromParcel(Parcel in) {
            return new Listitem(in);
        }

        public Listitem[] newArray(int size) {
            return new Listitem[size];
        }
    };
}

【问题讨论】:

  • 第二个错误是什么?

标签: android android-adapter android-recyclerview


【解决方案1】:

对于第一个错误:

您需要在适配器构造函数中传递一个Context

其实this里面的myMethod(ArrayList result)指的是OkHttpHandler.MyInterface而不是Context

要解决这个问题,请更改mAdapter = new MyAdapter(result,this);

mAdapter = new MyAdapter(result,YourActivityName.this);


第二个错误:

mDataset.get(position) 正在返回一个Listitem 对象,而您需要一个CharSequence(或String)对象作为setText() 方法的参数。

你应该这样做

viewHolder.txtHeader.setText(mDataset.get(position).getUrl());

viewHolder.txtHeader.setText(mDataset.get(position).getId());

【讨论】:

  • 好的,其他的错误你能帮我解决吗?
  • 我有错误无法在此代码中解决viewHolder.txtHeader.setText(mDataset.get(position));它在我的问题中是完整代码
  • 对不起,至于第二个答案我应该如何更改代码,你能告诉我吗?
  • 发布你的 Listitem 课程。
  • 为你高兴! (la chokr aala wajib) :)
猜你喜欢
  • 1970-01-01
  • 2020-05-06
  • 2021-12-10
  • 2017-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多