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

问题是您试图在成功的情况下将其添加到列表视图之前删除页脚视图。这就是您获得 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

这不是如何删除页脚视图的答案,但我有两种可能的解决方案:

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,您可以将footer view作为footerView真实内容的容器(例如FrameLayout),让它永远存在。如果它需要填充 content ,则填充它,如果不需要,则不要。

于 2013-08-19T07:21:50.327 回答
0

从:

ListView.removeFooterView(View) 上的崩溃

这是 2.3.6 上的 Android 版本 public 的问题boolean removeFooterView(View v),它不检查适配器是否已设置为 ListView。

所以,我所要做的就是检查:

listView.getAdapter() != null;

在删除footerView之前。

于 2013-08-19T08:16:02.163 回答