recyclerview 适配器匿名数组列表错误

recyclerview adapter anonymous arraylist error

我有 2 个错误,你能帮我改正吗?

主程序中出现此错误 activity

这是代码

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

对于第一个错误:

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

实际上 myMethod(ArrayList result) 中的 this 指的是 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());