0

スタックトレース:

java.lang.NullPointerException
at android.widget.ListView.removeFooterView(ListView.java:432)
at com.app.mobileapp.MainActivity$getValues.onPostExecute(MainActivity.java:666)

行 666:

listView.removeFooterView(footerView);

しかし、間違いなくListViewFooterViewの両方が適切に作成されています。行 666の直前にフッターをリストビューに設定できるため:

listView.addFooterView(footerView);

mAdapter = new mainAdapter(MainActivity.this, item_list, listView);

if (result.equals("empty")) {
    ((TextView) footerView.findViewById(R.id.footer))
        .setText("No values");
    listView.setAdapter(mAdapter);
} else if (result.equals("success")) {
    listView.removeFooterView(footerView);
    listView.setAdapter(mAdapter);
}

また、「空」の場合も正常に機能します。また、フッター ビューには"No values" と表示されます。しかし、 「成功」の場合はクラッシュします。

これはAndroid 4.0 以降では問題なく動作しますが、 2.3.6ではクラッシュします。

4

3 に答える 3

0

から:

ListView.removeFooterView(View) でクラッシュする

2.3.6の Android バージョンのパブリックの問題でboolean removeFooterView(View v)、アダプターが既に ListView に設定されているかどうかを確認しません。

だから、私がしなければならなかったのはチェックすることだけです:

listView.getAdapter() != null;

footerViewを削除する前に。

于 2013-08-19T08:16:02.163 に答える
0

問題は、成功した場合にリスト ビューに追加する前に、フッター ビューを削除しようとしていることです。それがあなたがNPEを取得している理由です。

 listView.addFooterView(footerView);

mAdapter = new mainAdapter(MainActivity.this, item_list, listView);

if (result.equals("empty")) {
    ((TextView) footerView.findViewById(R.id.footer))
        .setText("No values");
    listView.setAdapter(mAdapter);
} else if (result.equals("success")) {

    listView.setAdapter(mAdapter);
    listView.removeFooterView(footerView);
}

このコードを試してください : 幸運を祈ります

于 2013-08-19T05:51:34.223 に答える
0

フッタービューを削除する方法に対する完全な答えではありませんが、2つの可能な解決策があります:

1.この特定のケースのヒント: すぐに追加して削除するのではなく、追加する必要があるかどうかを確認してから追加してください。例:

mAdapter = new mainAdapter(MainActivity.this, item_list, listView);
if ("empty".equals(result)) {
    ((TextView) footerView.findViewById(R.id.footer))
        .setText("No values");
    listView.addFooterView(footerView);
    listView.setAdapter(mAdapter);
} else if ("success".equals(result))
    listView.setAdapter(mAdapter);

2. 古いバージョンの Android でコードが機能しない場合は、フッター ビューをフッター ビューの実際のコンテンツのコンテナー (FrameLayout など) にして、永久にそのままにしておくことができます。content を入力する必要がある場合は入力し、そうでない場合は入力しないでください。

于 2013-08-19T07:21:50.327 に答える