一个listview中convertview的问题
求助,我的问题是在ListView,setAdapter时候为什么第一个position的ConvertView是null,第二个就不为null,因为以前做项目一般至少是一屏的ConvertView是null然后ConvertView==null的情况才会出现,因为需要传View出去进行更新View操作。请各位大神帮忙解答,谢谢。
以下是布局和代码。
topic_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/titleTopicListItem"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:textSize="15sp"
android:layout_weight="1.0"
android:gravity="center_vertical"
android:paddingLeft="4dp"
android:paddingRight="8dp"
android:paddingTop="12dp"
android:paddingBottom="12dp"/>
<LinearLayout
android:id="@+id/topicItemDL"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="4dp"
android:layout_gravity="right|center_vertical"
android:orientation="vertical">
<ImageView
android:id="@+id/downloadImg"
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/down"/>
<TextView
android:id="@+id/downloadTV"
android:layout_width="20dp"
android:layout_height="20dp"
android:textColor="@color/black"
android:textSize="8sp"
android:text="下载"
android:layout_gravity="center_vertical"/>
</LinearLayout>
</LinearLayout>
Adapter源码
private class TopicListAdapter extends BaseAdapter{
@Override
public int getCount() {
return topicItems.size();
}
@Override
public Object getItem(int position) {
return topicItems.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TopicViewHolder holder;
if(convertView==null){
convertView = mInflater.inflate(R.layout.topic_list_item, null);
holder = new TopicViewHolder();
holder.tvTopicTitle = (TextView) convertView.findViewById(R.id.titleTopicListItem);
holder.tvDownload = (TextView) convertView.findViewById(R.id.downloadTV);
holder.ivDownload = (ImageView) convertView.findViewById(R.id.downloadImg);
holder.topicView =(ViewGroup) convertView;
convertView.setTag(holder);
}else{
holder = (TopicViewHolder) convertView.getTag();
}
// holder.topicView.setTag(position);
holder.tvTopicTitle.setText(topicItems.get(position).getName());
holder.topicView.setOnClickListener(new TopicItemOnClickListenner(position));
holder.ivDownload.setOnClickListener(new TopicItemOnClickListenner(position));
topicViews.put(position, holder.topicView);
return convertView;
}
}
以下是布局和代码。
topic_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/titleTopicListItem"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:textSize="15sp"
android:layout_weight="1.0"
android:gravity="center_vertical"
android:paddingLeft="4dp"
android:paddingRight="8dp"
android:paddingTop="12dp"
android:paddingBottom="12dp"/>
<LinearLayout
android:id="@+id/topicItemDL"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="4dp"
android:layout_gravity="right|center_vertical"
android:orientation="vertical">
<ImageView
android:id="@+id/downloadImg"
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/down"/>
<TextView
android:id="@+id/downloadTV"
android:layout_width="20dp"
android:layout_height="20dp"
android:textColor="@color/black"
android:textSize="8sp"
android:text="下载"
android:layout_gravity="center_vertical"/>
</LinearLayout>
</LinearLayout>
Adapter源码
private class TopicListAdapter extends BaseAdapter{
@Override
public int getCount() {
return topicItems.size();
}
@Override
public Object getItem(int position) {
return topicItems.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TopicViewHolder holder;
if(convertView==null){
convertView = mInflater.inflate(R.layout.topic_list_item, null);
holder = new TopicViewHolder();
holder.tvTopicTitle = (TextView) convertView.findViewById(R.id.titleTopicListItem);
holder.tvDownload = (TextView) convertView.findViewById(R.id.downloadTV);
holder.ivDownload = (ImageView) convertView.findViewById(R.id.downloadImg);
holder.topicView =(ViewGroup) convertView;
convertView.setTag(holder);
}else{
holder = (TopicViewHolder) convertView.getTag();
}
// holder.topicView.setTag(position);
holder.tvTopicTitle.setText(topicItems.get(position).getName());
holder.topicView.setOnClickListener(new TopicItemOnClickListenner(position));
holder.ivDownload.setOnClickListener(new TopicItemOnClickListenner(position));
topicViews.put(position, holder.topicView);
return convertView;
}
}
...全文
相关推荐
Android ListView与getView调用卡顿问题解决办法
解决ListView卡顿问题的方法有很多,以下是几种常见的优化策略:1. **复用convertView**:在`getView()`中,我们应当检查传入的convertView是否为空。
listview错位思路
convertView 是一个被重用的视图,当ListView滚动时,不再显示的视图会被重新使用来显示新的数据项。
android listview控件复用问题解决
当ListView需要显示一个新的item时,它会从缓存中获取或复用一个已经创建过的convertView。
ListVeiw适配器工具类+焦点抢占+convertView复用导致内容错乱
内容错乱通常出现在以下情况:当一个已复用的convertView被错误地设置了不对应的数据。
android_ListView优化
在Android开发中,ListView是一个非常常见的组件,用于展示大量数据的列表形式。然而,随着数据量的增加,如果不进行优化,ListView的性能问题就会变得尤为突出。


