0

我有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

什麼是第二個錯誤? –

回答

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());

+0

好吧,它的工作,和其他錯誤,你可以幫我嗎? – Moudiz

+0

其他錯誤是什麼? – Rami

+0

我在這段代碼中有錯誤無法解析'viewHolder.txtHeader.setText(mDataset.get(position));' 其在我的問題中完整代碼 – Moudiz