2

ListActivity、リストビューを使用しています。

listView = getListView();

完璧に機能しています。フッタービューを次のように追加しました

LayoutInflater inflater = getLayoutInflater();
listView.addFooterView( inflater.inflate( R.layout.footer, null ), null, false);

そして、すべてが光沢があり、醜いので、このフッター ビュー (1 つの edittext と 1 つのボタンのみを含む) を次のように listView のヘッダーに追加したいと考えました。

LayoutInflater inflater = getLayoutInflater();
listView.addHeaderView( inflater.inflate( R.layout.footer, null ), null, false);

そして突然すべてがうまくいかなくなり、すぐに RuntimeException が発生します。

Suspended(exception RuntimeException)
ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent)
ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent)
ActivityThread.access$2200(ActivityThread, Activity$ActiviyRecord, Intent),
so on..

なぜ例外がスローされるのですか? addFooterView と addHeaderView の違いは何ですか? ListActivity にヘッダーを追加するにはどうすればよいですか?

アップデート

コメントで読むことができるように、私のlogcatはまだ機能しませんが、現時点で次のことを試しました:

} catch(Exception e){ 
  Writer result = new StringWriter(); 
  PrintWriter printWriter = new PrintWriter(result);
  e.printStackTrace(printWriter);
  String error = result.toString(); 
}

その後、ブレークポイントを配置すると、式セクションでエラーを読み取ることができます。と言いました :

java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called. 

それは私たち全員にとって有益でした。コマンドの並べ替えを変更した後、完全に機能します。

4

3 に答える 3

11

ログインすると

java.lang.IllegalStateException: リストにヘッダー ビューを追加できません -- setAdapter は既に呼び出されています。

Listview のメソッドaddHeaderViewまたはaddFooterViewは、 setAdapterの前に呼び出す必要があります。

于 2012-04-15T17:24:51.410 に答える
0

ヘッダーとフッターのレイアウト xml を作成する

header_layout.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:text="header"
    />
    </RelativeLayout>

footer_layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="footer"
/>
</RelativeLayout>

現在活動中 Java ファイル onCreate() メソッド追加

listView = (ListView) findViewById(R.id.listView1);
LayoutInflater inflater = getLayoutInflater();
    ViewGroup header = (ViewGroup) inflater.inflate(R.layout.header, listView,
            false);
    ViewGroup footer = (ViewGroup) inflater.inflate(R.layout.footer, listView,
            false);
    listView.addHeaderView(header, null, false);
    listView.addFooterView(footer, null, false);
    listView.setAdapter(adapter);
于 2015-09-22T06:24:37.470 に答える
-6

そのため、listView にヘッダー ビューを追加する場合は、setListAdapter() を使用する前に厳密に行う必要があります。そうしないと、IllegalStateException が発生します。

于 2012-04-30T17:11:01.660 に答える