Milen Pivchev
Milen Pivchev

Reputation: 1479

Xamarin - Recycled View gives errors

I'm new to app development and I'm trying to create a Recycled View on a Fragment, however there are some problems, it throws the following errors:

enter image description here

Code:

namespace Homecheck.Fragments {
    public class SmokeSensor : Fragment {
        private RecyclerView recyclerView;
        private RecyclerView.Adapter adapter;
        private RecyclerView.LayoutManager layoutManager;
        private List<ItemData> itemData;

        public override void OnCreate(Bundle savedInstanceState) {
            base.OnCreate(savedInstanceState);

            recyclerView.HasFixedSize = true;

            layoutManager = new LinearLayoutManager(Activity);
            recyclerView.SetLayoutManager(layoutManager);

            itemData = new List<ItemData>();
            itemData.Add(new ItemData() {title = "Testing", image = Resource.Drawable.ic_circle_red});

            adapter = new MyAdapter(itemData);
            recyclerView.SetAdapter(adapter);
        }

        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View view = inflater.Inflate(Resource.Layout.SmokeSensor, container, false);
            recyclerView = view.FindViewById<RecyclerView>(Resource.Id.smoke_recycler_view);

            return view;
        }
    }

    public class MyAdapter : RecyclerView.Adapter {
        private List<ItemData> itemData;
        private TextView titleText;
        private ImageView imageId;

        public MyAdapter(List<ItemData> itemData) {
            this.itemData = itemData;
        }

        public class ViewHolder : RecyclerView.ViewHolder {
            public View mainView { get; set; }
            public TextView title { get; set; }
            public ImageView image { get; set; }

            public ViewHolder (View view) : base (view) {
                mainView = view;
            }
        }

        public override MyAdapter.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType) {
            View itemLayoutView = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.SmokeItemView, null);

            titleText = itemLayoutView.FindViewById<TextView>(Resource.Id.item_title);
            imageId = itemLayoutView.FindViewById<ImageView>(Resource.Id.item_icon);

            ViewHolder viewHolder = new ViewHolder(itemLayoutView) { title = titleText, image = imageId };

            return viewHolder;
        }

        public override void OnBindViewHolder(ViewHolder viewHolder, int position) {
            viewHolder.title.SetText(itemData[position]);
        }

        public override int getItemCount() {
            return itemData.Count();
        }
    }

    public class ItemData {
        public string title { get; set; }
        public int image { get; set; }
    }
}

I know it's most likely a stupid mistake, but I can't seem to find it and fix it.

Upvotes: 0

Views: 692

Answers (1)

thumbmunkeys
thumbmunkeys

Reputation: 20764

The return type of OnCreateViewHolder is wrong, it should be Android.Support.V7.Widget.RecyclerView.ViewHolder

You need to override ItemCount:

 public override int ItemCount {get{...}}

Wrong parameter type, fix it like this:

 public override void OnBindViewHolder(Android.Support.V7.Widget.RecyclerView.ViewHolder viewHolder, int position) 

Upvotes: 2

Related Questions