开发者

Inflating a View Inside a Runnable

I am attempting to write code that would allow me to have 1-2 views at the top of a listview that are of a different arrangement than the other views in the listview. I decided to try the method of using addHeaderView() for the 1-2 views that will differ in display.

I have two xml layout files, one that defines the view format that most of the listview views will fall under (list_image_checkbox_row.xml) and one for the Header Views (catalog_featured_row.xml). The adapter constructor uses list_image_checkbox_row as its resource in the constructor.

I used a Thread to set the adapter and load the views. I am able to programmatically create views and use addHeaderView to at them to the listview (using the same image resource), but I get errors when I try to use addHeaderView on a view I have inflated from a layout xml file.

          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);
        }
      });

I get a force close error and haven't been able to find anything in logcat (when I was trying to debug yesterday I got a NullPointerException). If I comment out the lv.addHeaderView(feat_view) line, the application does not force close on me. Here is the code for 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"开发者_StackOverflow中文版>

    <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>

Any suggestions for how to get the inflater to work?


Perhaps you should store lv in an instance variable instead of looking it up dynamically. Note that both View and Activity have a method called findViewById, and so your results will depend on how your code is organized.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜