当前位置:编程学习 > wap >>

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

} --------------------编程问答-------------------- 请说清楚点。 --------------------编程问答-------------------- 估计他说的是为什么if(convertView==null){}只执行一次; --------------------编程问答-------------------- 这个不重要吧,只要最后是n个可见项对应n个view不就行了,至于不可见项你更新也没用。
另外为什么要用这样的方式来传出去topicViews.put(position, holder.topicView);
用adapter.notifyDataChanged就可以吧 --------------------编程问答--------------------
引用 2 楼  的回复:
估计他说的是为什么if(convertView==null){}只执行一次;


2楼,你知道的太多了
补充:移动开发 ,  Android
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,