1

F1 レースに関する情報を表示するアプリケーションを作成する必要があります。この情報を表示するために、さまざまなデータ セット (1 つの位置、名前、時間、別のセクター時間など) を示すListViewいくつかの を使用しました。SimpleAdapters

adaptadorPortrait1 = new SimpleAdapter(
    getApplicationContext(),
    lista_adaptador,
    R.layout.portrait1,
    new String[] {"pos", "short_name", "time_total", "time_pred"},
    new int[] {R.id.pos, R.id.name, R.id.time,R.id.prev});
adaptadorPortrait2 = new SimpleAdapter(
    getApplicationContext(),
    lista_adaptador,
    R.layout.portrait2,
    new String[] {"pos", "short_name", "sect1","sect1","sect3"},
    new int[] {R.id.pos, R.id.name, R.id.psect, R.id.ssect, R.id.tsect});
 [...]

画面上で指をスライスしたり、モバイルを回転させたりするなどのイベントが発生すると、リストアダプターを変更します。

ここで、各列が何であるかを示すヘッダーをリストに追加したいと思います。このヘッダーは、アダプターと同時に変更する必要があります。「addHeaderView」メソッドを使用しようとしましたが、アプリが失敗し、「ヘッダー ビューをリストに追加できません -- setAdapter は既に呼び出されています」IllegalStateExceptionというメッセージ がスローされます。

何か案は?

PS: 下手な英語をお許しください。

4

3 に答える 3

3

ListViews は、単一のアダプタ内で複数のタイプのビューをサポートします。

adapter.getItemTypeCountおよびメソッドをオーバーライドするとadapter.getItemType(int position)、残りのビューとインラインでヘッダーを追加できます。したがって、各アダプター内の最初の項目は「ヘッダー」タイプのビュー (おそらく単純なTextView) になり、残りはリスト エントリになります。

getItemType位置 (ヘッダーの場合は 0) がヘッダーであるかどうかに応じて、 が異なる数値を返すことを確認する必要があります。

public static final int TYPE_HEADER = 0;
public static final int TYPE_CONTENT = 1;

public int getItemTypeCount(){
     return 2;
}

public int getItemType(int position){
    if(position == 0){
        return TYPE_HEADER;
    } else {
        return TYPE_CONTENT;
    }
}

public View getView(int position, View convertView, ViewGroup parent){
    // make sure that from here, you return the right kind of view based on getItemType(position)
    // you are guaranteed that if a convertView is passed to you (convertView != null)
    // that the convertView is of the appropriate type.

    int type = getItemType(position);
    if(type == TYPE_HEADER){
        // create (or reuse) and return a header view
    } else {
        // create (or reuse) and return a content view
    }

    return myView;

}
于 2012-04-14T18:48:40.800 に答える
0

発生するエラーは、ヘッダーとフッターの動作方法が原因です。リストはヘッダーとフッターを持つ中間アダプターを作成するため、を呼び出すaddHeaderView() に呼び出す必要がありますsetAdapter()。これは、あなたが望むことをすることができないことを意味します。代わりに2つの別々のを持ち、どちらを表示したいかに応じてListView呼び出すなど、別のことを試すことができます。setVisibility()

于 2012-04-14T18:36:33.687 に答える
0

ヘッダーを追加する前に setAdapter を使用していた場合

if (listView.getHeaderViewsCount() == 0) {
     ListAdapter adapter = listView.getAdapter();
     listView.setAdapter(null);
     listView.addHeaderView(aHeaderView);
     listView.setAdapter(adapter);
 }
于 2013-08-28T03:14:37.583 に答える