Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ListView ViewHolder组件返回空值_Android_Listview_Android Viewholder - Fatal编程技术网

Android ListView ViewHolder组件返回空值

Android ListView ViewHolder组件返回空值,android,listview,android-viewholder,Android,Listview,Android Viewholder,我已经为我的Listview实现了ViewHolder模式,如下所示:- public class HomeListAdapter : BaseAdapter { public HomeListAdapter(List<Models.MyModel> myList, Activities.HomeActivity homeActivity) { // TODO: Complete member initiali

我已经为我的Listview实现了ViewHolder模式,如下所示:-

    public class HomeListAdapter : BaseAdapter
    {

        public HomeListAdapter(List<Models.MyModel> myList, Activities.HomeActivity homeActivity)
        {
            // TODO: Complete member initialization
            this.myList = myList;
            this.homeActivity = homeActivity;
            prefs = PreferenceManager.GetDefaultSharedPreferences(homeActivity);

            inflater = LayoutInflater.FromContext(homeActivity);

        }
        public override int Count
        {
            get { return myList.Count; }
        }
        public override int ViewTypeCount
        {
            get
            {
                return 2;
            }
        }

        public override Java.Lang.Object GetItem(int position)
        {
            return position;
        }



        public override long GetItemId(int position)
        {
            return 0;
        }
        public override int GetItemViewType(int position)
        {
            if (position == 0 || position == 1)
            {
                return 1;
            }
            else
            {
                return 2;
            }
        }
        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            View rootView = convertView;
            MyViewHolder mHolder;
            var mData = myList[position];

            int item = GetItemViewType(position);   
            if(rootView ==null)
            {
                mHolder = new MyViewHolder(); ;
                switch(item)
                {
                    case 1:
                        rootView = homeActivity.LayoutInflater.Inflate(Resource.Layout.phone_home_big_row2, null);
                        mHolder.txtDate = convertView.FindViewById<TextView>(Resource.Id.txtDate);
                         mHolder.txtTitle = convertView.FindViewById<TextView>(Resource.Id.txtTitle);

                         mHolder.txtDetail = convertView.FindViewById<TextView>(Resource.Id.txtDetail);
                         mHolder.imgPlaceholderImage = convertView.FindViewById<ImageView>(Resource.Id.imgPlaceholderImage);
                         mHolder.txtCategory = convertView.FindViewById<TextView>(Resource.Id.txtCategory);
                        break;
                    case 2:
                        rootView = homeActivity.LayoutInflater.Inflate(Resource.Layout.phone_home_list_row, null);
                        mHolder.txtTitle = convertView.FindViewById<TextView>(Resource.Id.txtTitle);
                        mHolder.txtDate = convertView.FindViewById<TextView>(Resource.Id.txtDate);
                        mHolder.viewColor = convertView.FindViewById<View>(Resource.Id.viewColor);
                        mHolder.imgPlaceholderImage = convertView.FindViewById<ImageView>(Resource.Id.imgPlaceholderImage);
                        break;
                }

                rootView.Tag = mHolder;
            }
            else
            {
                mHolder = (MyViewHolder)rootView.Tag;
            }

           switch(item)
           {
               case 1:
                     mHolder.txtTitle.Text = mData.Title;
            if (mHolder.txtDetail != null)
            {
                mHolder.txtDetail.Text = mData.BodyText;
                mHolder.txtDetail.Ellipsize = TextUtils.TruncateAt.End;
                mHolder.txtDetail.SetMaxLines(3);
                mHolder.txtDetail.SetTextColor(Color.Black);
            }
            if (mHolder.txtCategory != null)
            {
                mHolder.txtCategory.Text = mData.NewsSourceTitle;
                mHolder.txtCategory.SetTextColor(Color.White);

                mHolder.txtCategory.SetBackgroundColor(Color.ParseColor(mData.Color));
            }
            if (!string.IsNullOrEmpty(mData.PublishedDate))
            {
                mHolder.txtDate.Text = DateTime.Parse(mData.PublishedDate).ToString("dd MMMM yyyy", CultureInfo.InvariantCulture);
            }

                   break;
               case 2:
                   mHolder.txtTitle.Text = mData.Title;

                   if (mHolder.viewColor != null)
                   {
                       mHolder.viewColor.SetBackgroundColor(Color.ParseColor(mData.Color));
                   }
                    if (!string.IsNullOrEmpty(mData.PublishedDate))
                   {
                      mHolder.txtDate.Text = DateTime.Parse(mData.PublishedDate).ToString("dd MMMM yyyy", CultureInfo.InvariantCulture);
                    }


                   break;

           }






            return rootView;
        }
        public class MyViewHolder : Java.Lang.Object
        {

            public TextView txtTitle { get; set;}
            public TextView txtDate{ get; set;}
            public TextView txtDetail{ get; set;}
            public ImageView imgPlaceholderImage { get; set; }
            public View viewColor { get; set; }
            public TextView txtCategory { get; set; }
        }
    }
}
公共类HomeListAdapter:BaseAdapter
{
公共HomeListAdapter(列表myList,Activities.HomeActivity HomeActivity)
{
//TODO:完成成员初始化
this.myList=myList;
this.homeActivity=homeActivity;
prefs=PreferenceManager.GetDefaultSharedReferences(homeActivity);
充气器=LayoutFlater.FromContext(家庭活动);
}
公共覆盖整数计数
{
获取{return myList.Count;}
}
公共覆盖int ViewTypeCount
{
得到
{
返回2;
}
}
public override Java.Lang.Object GetItem(int位置)
{
返回位置;
}
公共覆盖长GetItemId(int位置)
{
返回0;
}
公共覆盖int GetItemViewType(int位置)
{
如果(位置==0 | |位置==1)
{
返回1;
}
其他的
{
返回2;
}
}
公共覆盖视图GetView(int位置、视图转换视图、视图组父视图)
{
视图rootView=convertView;
我的视图持有者mHolder;
var mData=myList[位置];
int item=GetItemViewType(位置);
if(rootView==null)
{
mHolder=新的MyViewHolder();
开关(项目)
{
案例1:
rootView=homeActivity.LayoutFlater.Inflate(Resource.Layout.phone\u home\u big\u row2,null);
mHolder.txtDate=convertView.findviewbyd(Resource.Id.txtDate);
mHolder.txtTitle=convertView.FindViewById(Resource.Id.txtTitle);
mHolder.txtdail=convertView.findviewbyd(Resource.Id.txtdail);
mHolder.imgPlaceholderImage=convertView.findviewbyd(Resource.Id.imgPlaceholderImage);
mHolder.txtCategory=convertView.FindViewById(Resource.Id.txtCategory);
打破
案例2:
rootView=homeActivity.LayoutFlater.Inflate(Resource.Layout.phone\u home\u list\u行,null);
mHolder.txtTitle=convertView.FindViewById(Resource.Id.txtTitle);
mHolder.txtDate=convertView.findviewbyd(Resource.Id.txtDate);
mHolder.viewColor=convertView.FindViewById(Resource.Id.viewColor);
mHolder.imgPlaceholderImage=convertView.findviewbyd(Resource.Id.imgPlaceholderImage);
打破
}
Tag=mHolder;
}
其他的
{
mHolder=(MyViewHolder)rootView.Tag;
}
开关(项目)
{
案例1:
mHolder.txtTitle.Text=mData.Title;
if(mHolder.txtdail!=null)
{
mHolder.txtdail.Text=mData.BodyText;
mHolder.txtdeail.Ellipsize=TextUtils.TruncateAt.End;
mHolder.txtDetail.SetMaxLines(3);
mHolder.txtdeail.SetTextColor(Color.Black);
}
如果(mHolder.txtCategory!=null)
{
mHolder.txtCategory.Text=mData.NewsSourceTitle;
mHolder.txtCategory.SetTextColor(Color.White);
mHolder.txtCategory.SetBackgroundColor(Color.ParseColor(mData.Color));
}
如果(!string.IsNullOrEmpty(mData.PublishedDate))
{
mHolder.txtDate.Text=DateTime.Parse(mData.PublishedDate).ToString(“dd-MMMM-yyyy”,CultureInfo.InvariantCulture);
}
打破
案例2:
mHolder.txtTitle.Text=mData.Title;
如果(mHolder.viewColor!=null)
{
mHolder.viewColor.SetBackgroundColor(Color.ParseColor(mData.Color));
}
如果(!string.IsNullOrEmpty(mData.PublishedDate))
{
mHolder.txtDate.Text=DateTime.Parse(mData.PublishedDate).ToString(“dd-MMMM-yyyy”,CultureInfo.InvariantCulture);
}
打破
}
返回rootView;
}
公共类MyViewHolder:Java.Lang.Object
{
公共文本视图txtTitle{get;set;}
公共文本视图txtDate{get;set;}
公共文本视图txtDetail{get;set;}
公共图像视图imgPlaceholderImage{get;set;}
公共视图viewColor{get;set;}
公共文本视图txtCategory{get;set;}
}
}
}

但是我总是将mHolder.txttTitle和其他组件设置为null,即使mHolder不是null。我需要根据它们的位置对两种不同的布局进行充气。我是否做错了什么?感谢您的帮助。谢谢。

首先,您应该从getItem overrided方法返回特定位置的项目

public override Java.Lang.Object GetItem(int position)
    {
        return myList(position);
    }

首先,应该从getItem重写方法返回特定位置的项

public override Java.Lang.Object GetItem(int position)
    {
        return myList(position);
    }

您的问题之所以出现,是因为您的代码有时引用
rootView
,有时引用
convertView

在这一行中,您将对
convertView
执行
findViewByID()

mHolder.txtTitle=convertView.FindViewById<TextView>(Resource.Id.txtTitle);

我建议您删除代码中对
rootView
的所有引用,直接使用
convertView
。这就是为什么它被提供给您的方法。

您的问题是因为您的代码有时引用
rootView
,有时引用
convertView

在这个l