前几天在写一个测试文件时,,在原布局文件中添加listview并绑定到自定义的adapter(继承自BaseAdapter)发现未达到期望效果,调试发现未进入getView()方法;
没有道理,分明调用了adapter的notifyDataSetChanged()方法,然后应该进入getView()的,可是为什么不调用呢?
网上查了资料,有三种原因:
1、getCount()返回的size为0,因此不会执行;
2、布局文件的问题、( 这类问题应该不能统一,各种布局问题都可能导致getView不运行 );
3、线程问题、可能单独开了线程执行例如下载等操作,但修改UI必须是在主线程中的,也就是说注意看下是否是在主线程中;
回到我的问题:首先调试排除1跟3的可能,size返回为4,未单独开辟线程,所以很可能是2存在问题,之前一直觉得没问题额。后来查了一下布局文件,发现是布局文件的问题导致的getView无法运行。看看我关于布局文件的部分代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/iv_addExcepReport"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:src="@drawable/btn_add_report"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_marginTop="20dp">
<TextView
android:id="@+id/tv_submitTime"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:text="test"
style="@style/tile"/>
</LinearLayout>
<ListView
android:id="@+id/list1"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</LinearLayout>
在第二个LinearLayout中,我把高度设置成了android:layout_height="match_parent",这样导致了ListView中要显示的内容没有办法在容器中显示了。因为标题栏的高度设置成了match_parent了。把match_parent改成wrap_parent,那么就可以正常显示内容了。