【问题标题】:Xamarin - Recycled View gives errorsXamarin - 回收视图给出错误
【发布时间】:2015-08-07 09:19:49
【问题描述】:

我是应用程序开发的新手,我正在尝试在片段上创建一个回收视图,但是有一些问题,它会引发以下错误:

代码:

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

我知道这很可能是一个愚蠢的错误,但我似乎无法找到并修复它。

【问题讨论】:

    标签: c# android xamarin android-recyclerview


    【解决方案1】:

    OnCreateViewHolder的返回类型不对,应该是Android.Support.V7.Widget.RecyclerView.ViewHolder

    你需要覆盖ItemCount:

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

    参数类型错误,修改如下:

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

    【讨论】:

    • 它抛出这个:'Android.Support.V7.Widget.RecyclerView.ViewHolder' does not contain a definition for 'title' and no extension method 'title' accepting a first argument of type 'Android.Support.V7.Widget.RecyclerView.ViewHolder' could be found (are you missing a using directive or an assembly reference?)
    • 我建议您尝试理解这些错误消息的含义,而不是仅仅将它们粘贴在这里
    猜你喜欢
    • 2017-03-19
    • 2018-01-17
    • 2014-12-08
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多