Laurenswuyts
Laurenswuyts

Reputation: 2142

header in listview

I want to add a header in my listview but it's getting a forceclose. I'm trying to put a header at the top of my listview. So when i create this listview i'm putting op these code:

lv = getListView();

        LayoutInflater inflater = getLayoutInflater();
        ViewGroup header = (ViewGroup)inflater.inflate(R.layout.header, lv, false);
        lv.addHeaderView(header, null, false);

This is my header.xml :

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#DCDCDC"
    android:orientation="vertical" >

    <requestFocus />

    <ImageView
        android:id="@+id/imageButton2"
        android:layout_width="fill_parent"
        android:layout_height="52dip"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:contentDescription="@string/header"
        android:src="@drawable/list_header" />

     <ImageButton
        android:id="@+id/imageButtonSearch"
        android:layout_width="60dip"
        android:layout_height="45dip"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:contentDescription="@string/header"
        android:src="@drawable/search" 
        android:background="@android:color/transparent" 
        />

    <ImageView
        android:id="@+id/imageButton3"
        android:layout_width="150dip"
        android:layout_height="50dip"
        android:layout_alignBottom="@+id/imageButton2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:contentDescription="@string/header"
        android:src="@drawable/titel" />

    </RelativeLayout>

And here is my logcat:

12-04 19:31:30.478: E/AndroidRuntime(372): FATAL EXCEPTION: main
12-04 19:31:30.478: E/AndroidRuntime(372): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.laurenswuyts.find.it/com.laurenswuyts.find.it.AndroidListViewActivity}: java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called.
12-04 19:31:30.478: E/AndroidRuntime(372):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
12-04 19:31:30.478: E/AndroidRuntime(372):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
12-04 19:31:30.478: E/AndroidRuntime(372):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
12-04 19:31:30.478: E/AndroidRuntime(372):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
12-04 19:31:30.478: E/AndroidRuntime(372):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-04 19:31:30.478: E/AndroidRuntime(372):  at android.os.Looper.loop(Looper.java:130)
12-04 19:31:30.478: E/AndroidRuntime(372):  at android.app.ActivityThread.main(ActivityThread.java:3683)
12-04 19:31:30.478: E/AndroidRuntime(372):  at java.lang.reflect.Method.invokeNative(Native Method)
12-04 19:31:30.478: E/AndroidRuntime(372):  at java.lang.reflect.Method.invoke(Method.java:507)
12-04 19:31:30.478: E/AndroidRuntime(372):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-04 19:31:30.478: E/AndroidRuntime(372):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-04 19:31:30.478: E/AndroidRuntime(372):  at dalvik.system.NativeStart.main(Native Method)
12-04 19:31:30.478: E/AndroidRuntime(372): Caused by: java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called.
12-04 19:31:30.478: E/AndroidRuntime(372):  at android.widget.ListView.addHeaderView(ListView.java:279)
12-04 19:31:30.478: E/AndroidRuntime(372):  at com.laurenswuyts.find.it.AndroidListViewActivity.onCreate(AndroidListViewActivity.java:80)
12-04 19:31:30.478: E/AndroidRuntime(372):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-04 19:31:30.478: E/AndroidRuntime(372):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
12-04 19:31:30.478: E/AndroidRuntime(372):  ... 11 more

Upvotes: 0

Views: 378

Answers (1)

nfirex
nfirex

Reputation: 1523

I think, you just must add headerView before setAdapter(), you can read about it in documentation - addHeaderView().

ListView keep all header and footers in special adapter, which wrap your adapter (from setAdapter). WrapperAdapter will create only at add footer or header before setAdapter. That's why you catch error, when try add any header after setAdapter.

If I rushed to conclusions, you can provide a little more code?

Upvotes: 2

Related Questions