Android ArrayAdapter数据集中的元素数为零
我正在尝试为行构建一个带有自定义视图的列表,每行将包含一个图像视图和两个文本视图 为此,我扩展了ArrayAdapter类(称为PostersArrayAdapter)并重写了getView()方法,以便在数据和行布局之间建立正确的连接 但是,当我尝试使用带有一些数据的PosterData类数组(我的实现)构造PosterArrayAdapter时,结果是适配器为空,意味着getCount()返回零,listView为空 有人能告诉我我做错了什么吗? 我依赖于我在这里找到的一个代码- 多谢各位 以下是相关代码:(PosterData类只是一个具有两个字符串字段的类)Android ArrayAdapter数据集中的元素数为零,android,listview,android-arrayadapter,Android,Listview,Android Arrayadapter,我正在尝试为行构建一个带有自定义视图的列表,每行将包含一个图像视图和两个文本视图 为此,我扩展了ArrayAdapter类(称为PostersArrayAdapter)并重写了getView()方法,以便在数据和行布局之间建立正确的连接 但是,当我尝试使用带有一些数据的PosterData类数组(我的实现)构造PosterArrayAdapter时,结果是适配器为空,意味着getCount()返回零,listView为空 有人能告诉我我做错了什么吗? 我依赖于我在这里找到的一个代码- 多谢各位
公共类PostersListActivity扩展ListActivity{
PICS的最终私有整数=2;
私人内容获取者cg;
私人PosterData[]海报;
私有列表视图列表视图;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
cg=新内容获取者(图片数量);
尝试
{
海报=cg.parseIndexFile();
int res=cg.下载Posterpics(1);
}
捕获(客户端协议例外e)
{
e、 printStackTrace();
}
捕获(IOE异常)
{
e、 printStackTrace();
}
//使用我们自己的列表适配器
listView=(listView)findViewById(android.R.id.list);
//setAdapter((ListAdapter)新的ArrayAdapter(this,R.layout.list_项,R.id.title,titles));
PostersArrayAdapter postersAdapter=新的PostersArrayAdapter(此为海报);
Log.d(“PostersListActivity.onCreate()”,适配器数据集中的元素数为“+postersAdapter.getCount());
setAdapter(postersAdapter);
}
公共类PosterArrayAdapter扩展了ArrayAdapter{
私人最终活动背景;
私人最终PosterData[]海报;
公共PosterArrayAdapter(活动背景、PosterData[]海报){
超级(上下文、右布局、列表项);
this.context=上下文;
这个。海报=海报;
}
//static保存对外部类的引用并避免访问
//包含类的任何成员
类视图持有者{
公众影像视图标识;
公共文本视图标题;
公共文本视图名称;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//ViewHolder会将评估缓冲到行的各个字段
//布局
视窗座;
//如果作为参数传递,则回收现有视图
//这将节省Android上的内存和时间
//仅当所有类的基本布局相同时,此选项才有效
视图行视图=转换视图;
if(rowView==null)
{
LayoutInflater充气器=上下文。getLayoutInflater();
rowView=充气机。充气(R.layout.list_项,空,真);
holder=新的ViewHolder();
holder.title=(TextView)rowView.findViewById(R.id.title);
holder.names=(TextView)rowView.findViewById(R.id.names);
holder.logo=(ImageView)rowView.findviewbyd(R.id.logo);
rowView.setTag(支架);
}
其他的
{
holder=(ViewHolder)rowView.getTag();
}
holder.title.setText(海报[position].getTitle());
holder.names.setText(海报[position].getNames());
holder.logo.setImageResource(R.drawable.icon);
返回行视图;
}
}
}
以下是我正在使用的列表视图布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@+id/textView1"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/selectPoster"
android:layout_gravity="center_horizontal">
</TextView>
<ListView android:id="@android:id/list"
android:layout_height="wrap_content"
android:layout_width="match_parent">
</ListView>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_height="wrap_content">
<LinearLayout android:id="@+id/linearLayout1"
android:layout_height="match_parent"
android:layout_width="wrap_content" >
<ImageView android:id="@+id/logo"
android:src="@drawable/icon"
android:layout_height="wrap_content"
android:layout_width="22px"
android:layout_marginTop="4px"
android:layout_marginRight="4px"
android:layout_marginLeft="4px">
</ImageView>
<LinearLayout android:id="@+id/linearLayout2"
android:layout_height="match_parent"
android:layout_width="fill_parent"
android:orientation="vertical">
<TextView android:id="@+id/title"
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30px">
</TextView>
<TextView android:id="@+id/names"
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
</LinearLayout>
</LinearLayout>
</LinearLayout>
下面是我使用的列表元素布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@+id/textView1"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/selectPoster"
android:layout_gravity="center_horizontal">
</TextView>
<ListView android:id="@android:id/list"
android:layout_height="wrap_content"
android:layout_width="match_parent">
</ListView>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_height="wrap_content">
<LinearLayout android:id="@+id/linearLayout1"
android:layout_height="match_parent"
android:layout_width="wrap_content" >
<ImageView android:id="@+id/logo"
android:src="@drawable/icon"
android:layout_height="wrap_content"
android:layout_width="22px"
android:layout_marginTop="4px"
android:layout_marginRight="4px"
android:layout_marginLeft="4px">
</ImageView>
<LinearLayout android:id="@+id/linearLayout2"
android:layout_height="match_parent"
android:layout_width="fill_parent"
android:orientation="vertical">
<TextView android:id="@+id/title"
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30px">
</TextView>
<TextView android:id="@+id/names"
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
</LinearLayout>
</LinearLayout>
</LinearLayout>
确保getCount()
正确实施,以便:
@Override
public int getCount(){
return posters!=null ? posters.length : 0;
}
编辑:通过调用
ArrayAdapter(Context context, int textViewResourceId)
ArrayAdapter(Context context, int textViewResourceId, T[] objects)
构造函数您没有将对象数组传递给构造函数
你应该给警察打电话
ArrayAdapter(Context context, int textViewResourceId)
ArrayAdapter(Context context, int textViewResourceId, T[] objects)
构造函数,它还将对象数组作为参数。现在,它返回正确的数字。更好的是,现在列表显示正确(在列表为空之前)。为什么重写getCount方法解决了这个问题?我认为这是因为您没有调用正确的超级构造函数。调用正确的超级构造函数将阻止重写getCount的需要?为什么你认为我打错电话了?什么原理让你得出这个结论?解决了。非常感谢你。