recyclerview适配器匿名arraylist错误

时间:2016-02-13 16:01:23

标签: android android-adapter android-recyclerview recycler-adapter

我有2个错误,你能帮我修理一下吗?

主要活动中的此错误

enter image description here

这是代码

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

列表项

Command="mui:LinkCommands.NavigateLink"
        	CommandParameter="cmd://settheme|/NLauncher;component/designs/ModernUI.BO2ii.xaml"

1 个答案:

答案 0 :(得分:3)

对于第一个错误:

您需要在适配器构造函数中传递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());