首页 > 解决方案 > 回收站视图不适用于 Xamarin Android 中的数据库

问题描述

我正在我的 xamarin android 应用程序中实现 recyclerview,它的工作方式非常奇怪

  1. 首先,当我在列表中硬编码项目(数据)时,我的应用程序停止,当我使用数据库将数据放入列表时,它不会停止工作,但不会显示任何视图。

这是我的 HomeActivity.cs 代码

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

            // Create your application here
            SetContentView(Resource.Layout.Home);

            InitData();

            recycler = FindViewById<RecyclerView>(Resource.Id.recyclerView1);
            recycler.HasFixedSize = true;
            //  layoutManager = new LinearLayoutManager(this);
            layoutManager = new GridLayoutManager(this, 1, GridLayoutManager.Horizontal, false);
            recycler.SetLayoutManager(layoutManager);
            adapter = new RecyclerViewAdapter(lstData);
            recycler.SetAdapter(adapter);
}


  private void InitData()
        {
            //foreach (var item in await IssueController.FetchPostList())
            //{
            //    lstData.Add(item);
            //}



            lstData.Add(new Data()
            {
                IssueImage = "base64stringofimage",
                UserImage = "base64stringofimage",
                IssueDate = DateTime.Now,
                UserName = "asadullah",
                IssueStatement = "some issue statement"
            });



        }

我尝试调试更具体的导致停止的原因,我意识到它在 recyclerviewadapter 类中的 OnBindViewHolder() 方法结束时停止。

这是 RecyclerViewAdapter 类:

RecyclerViewAdapter.cs

using Android.Graphics;
using Android.Support.V7.Widget;
using Android.Views;
using Android.Widget;
using Refractored.Controls;
using System.Collections.Generic;
using System;
using Android.Content;
using AndroidX.Core.Graphics;

namespace FinalProject_PU.Helper
{
    class RecyclerViewHolder : RecyclerView.ViewHolder
    {
        public ImageView imageview { get; set; }
        public CircleImageView UserImage { get; set; }
        public TextView UserName { get; set; }
        public TextView IssueDate { get; set; }
        public TextView IssueStatement { get; set; }

        Android.Graphics.Typeface tf;
        //
        // public TextView Description { get; set; }
        public RecyclerViewHolder(Android.Views.View itemView) : base(itemView)
        {
            imageview = itemView.FindViewById<ImageView>(Resource.Id.imageView1);
            UserImage = itemView.FindViewById<CircleImageView>(Resource.Id.imgProfile);
            UserName = itemView.FindViewById<TextView>(Resource.Id.tvname);
            IssueDate = itemView.FindViewById<TextView>(Resource.Id.tvtime);
            IssueStatement = itemView.FindViewById<TextView>(Resource.Id.tvinfo);
            //beauttification
            
            /*
            tf = Typeface.CreateFromAsset(Assets, "Quicksand-Bold.otf");
            IssueStatement.SetTypeface(tf, TypefaceStyle.Bold);

           
            tf = Typeface.CreateFromAsset(Assets, "Quicksand-Bold.otf");
            UserName.SetTypeface(tf, TypefaceStyle.Bold);

           
            tf = Typeface.CreateFromAsset(Assets, "Quicksand-Bold.otf");
            IssueDate.SetTypeface(tf, TypefaceStyle.Bold);
            */
        }
    }
    class RecyclerViewAdapter : RecyclerView.Adapter
    {
        private List<Data> lstData = new List<Data>();

        public RecyclerViewAdapter(List<Data> lstData)
        {
            this.lstData = lstData;
        }

        public override int ItemCount
        {
            get
            {
                return lstData.Count;
            }
        }

        public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
        {
            RecyclerViewHolder viewHolder = holder as RecyclerViewHolder;
            byte[] arr0 = Convert.FromBase64String(lstData[position].IssueImage); //IssueImage
            Bitmap b0 = BitmapFactory.DecodeByteArray(arr0, 0, arr0.Length);
            viewHolder.imageview.SetImageBitmap(b0);
            byte[] arr1 = Convert.FromBase64String(lstData[position].UserImage); //UserImage
            Bitmap b1 = BitmapFactory.DecodeByteArray(arr1, 0, arr1.Length);
            viewHolder.UserImage.SetImageBitmap(b1); //
            viewHolder.UserName.Text = lstData[position].UserName;
            viewHolder.IssueDate.Text = lstData[position].ElevatedDays;
            viewHolder.IssueStatement.Text = lstData[position].IssueStatement;

        }

        public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
        {
            LayoutInflater inflater = LayoutInflater.From(parent.Context);
            Android.Views.View itemView = inflater.Inflate(Resource.Layout.items, parent, false);
            return new RecyclerViewHolder(itemView);
        }
    }
}

标签: c#android-recyclerviewxamarin.android

解决方案


推荐阅读