8

私には例外がありました。ListView (sic) からフッター ビューを削除するときのアダプターのクラス キャスト例外。

 java.lang.ClassCastException: com.test.MyAdapter
 at android.widget.ListView.removeFooterView(ListView.java:381)

これはどのように起こりますか?フッターを削除すると、クラス キャスト例外と何の関係がありますか????

リストはおそらくマルチリストアダプターですが、フッターを削除するためのクラスキャスト例外です(sic)。

4

4 に答える 4

12

ListViewメソッドを呼び出す前にフッター ビューを追加しますsetAdapter()

追加した:

public void addFooterView (View v)

導入されたバージョン: API レベル 1 リストの下部に表示される固定ビューを追加します。addFooterView が複数回呼び出された場合、ビューは追加された順序で表示されます。この呼び出しを使用して追加されたビューは、必要に応じてフォーカスを取得できます。

注: setAdapter を呼び出す前にこれを呼び出します。これは、ListView が提供されたカーソルを、ヘッダー ビューとフッター ビューも考慮したカーソルでラップできるようにするためです。

パラメーター v 追加するビュー。

ソース

また、この興味深い投稿を確認できます。

お役に立てれば。

于 2012-09-29T02:44:01.107 に答える
9

これは上記の答えのコードです。私の場合はうまくいきました:

アダプターを設定してから削除する前に、listView に footerView (ページネーション付きの listView の loadingView です) を設定する必要がありました。まず、OnCreate メソッドでレイアウト ファイルから loadingView を初期化しました。

LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
loadingView = layoutInflater.inflate(R.layout.loading_view, null);

次に、同じ方法でこの回避策を使用しました。

this.setIsLoading(true);
listView.setAdapter(adapter);
this.setIsLoading(false);

どこ

private void setIsLoading(boolean isLoading)
{
    this.isLoading = isLoading;

    if (isLoading) {
        listView.addFooterView(loadingView);
    }
    else {
        listView.removeFooterView(loadingView);
    }
}
于 2013-11-28T17:42:02.077 に答える
0

他の回答に加えて、フッターを動的に追加/削除する場合 (リストの一番下に到達してからフッター ビューを追加する場合など)、最も簡単な方法は、オーバーライドsetAdapterしてListView新しい View オブジェクトを追加することです。そこのフッターとして、これにより、アダプターが次のようにラップされますHeaderViewListAdapter

@Override
public void setAdapter(ListAdapter adapter) {
    addFooterView(new View(getContext()));
    super.setAdapter(adapter);
}
于 2015-12-21T01:30:54.387 に答える