recyclerview适配器匿名arraylist错误

问题描述:

我有2个错误,你能帮我解决它们吗?recyclerview适配器匿名arraylist错误

这个错误主要活动

enter image description here

这是代码

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

什么是第二个错误? –

对于第一个错误:

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

+0

好吧,它的工作,和其他错误,你可以帮我吗? – Moudiz

+0

其他错误是什么? – Rami

+0

我在这段代码中有错误无法解析'viewHolder.txtHeader.setText(mDataset.get(position));' 其在我的问题中完整代码 – Moudiz