我正在尝试编写代码,允许我在listview顶部有1-2个视图,这些视图与listview中的其他视图的排列方式不同。我决定尝试使用addHeaderView()方法来显示1-2个不同的视图。
我有两个xml布局文件,一个用于定义大多数listview视图所属的视图格式(list_image_checkbox_row.xml),另一个用于Header Views(catalog_featured_row.xml)。适配器构造函数使用list_image_checkbox_row作为构造函数中的资源。
我使用Thread来设置适配器并加载视图。我能够以编程方式创建视图并使用addHeaderView将它们添加到listview(使用相同的图像资源),但是当我尝试在我从布局xml文件中充气的视图上使用addHeaderView时出现错误。
handler.post(new Runnable() {
@Override
public void run() {
lv = (ListView)findViewById(R.id.sources_list);
Activity context = BrowseSourceActivity.this;
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.catalog_featured_row, null);
ImageView feat_view = (ImageView) view.findViewById(R.id.image);
feat_view.setImageResource(R.drawable.arrow);
lv.addHeaderView(feat_view);
setListAdapter(array);
}
});
我收到强制关闭错误并且无法在logcat中找到任何内容(当我昨天尝试调试时,我得到了NullPointerException)。如果我注释掉lv.addHeaderView(feat_view)行,应用程序不会强制关闭我。以下是featured_catalog_row.xml的代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="70dip"
android:padding="5dip">
<ProgressBar android:id="@+id/spinner"
android:indeterminate="true"
android:layout_width="30dip"
android:layout_height="30dip"
android:layout_centerInParent="true"
/>
<ImageView android:id="@+id/image"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</RelativeLayout>
有关如何让inflater工作的任何建议吗?
答案 0 :(得分:1)
也许您应该将lv
存储在实例变量中,而不是动态查找它。请注意,View
和Activity
都有一个名为findViewById
的方法,因此您的结果将取决于代码的组织方式。