在Runnable中充气视图

时间:2011-04-04 19:09:46

标签: android multithreading listview

我正在尝试编写代码,允许我在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工作的任何建议吗?

1 个答案:

答案 0 :(得分:1)

也许您应该将lv存储在实例变量中,而不是动态查找它。请注意,ViewActivity都有一个名为findViewById的方法,因此您的结果将取决于代码的组织方式。