0

I have the 2 errors , can you help me to fix them ?

this error in main activity

enter image description here

This is the code

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

and second error here in my adapter

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

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

this is the full code

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

}

listitem

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];
        }
    };
}
Rami
  • 7,879
  • 12
  • 36
  • 66
Moudiz
  • 7,211
  • 22
  • 78
  • 156

1 Answers1

3

For the first error:

You need to pass a Context in the adapter constructor.

Actually this inside myMethod(ArrayList result) refers to OkHttpHandler.MyInterface not a Context.

To solve this, change mAdapter = new MyAdapter(result,this);

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


For the second error:

mDataset.get(position) is returning a Listitem object, while you need a CharSequence (or String) object as parameter with setText() method.

You should do

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

or

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

Rami
  • 7,879
  • 12
  • 36
  • 66
  • ok it worked , and the other error can you help me with it please? – Moudiz Feb 13 '16 at 16:13
  • I have error cannot resolve here in this code `viewHolder.txtHeader.setText(mDataset.get(position));` its in my question the full code – Moudiz Feb 13 '16 at 16:17
  • sorry, as for the second answer how should I change the code , can you telll me please ? – Moudiz Feb 13 '16 at 16:20
  • Post your *Listitem* class. – Rami Feb 13 '16 at 16:20
  • Glad for you! ( *la chokr aala wajib* ) :) – Rami Feb 13 '16 at 16:32
  • if you would like , I have posted a new question related to my code , different error ofcourse http://stackoverflow.com/questions/35382552/no-adapter-attached-skipping-layout-recyclerview – Moudiz Feb 13 '16 at 16:48