调用getAdapter()的例外情况

时间:2013-10-02 21:11:21

标签: android android-arrayadapter listadapter

LinkAdapter是一个扩展ArrayAdapter

的类
private static List<LinkData> linkDataList = new ArrayList<LinkData>();
private LinkAdapter la;
la = new LinkAdapter(someLinkDataitmes, getActivity()); 
ListView lv = (ListView) v.findViewById(R.id.urls);
lv.setAdapter(la);


public class LinkData {
    private String name, image, description;

    public LinkData(String name, String image, String description){
        this.name = name;
        this.image=image;
        this.description=description;
        }
}

现在我想更新我的listview

ListView lv = (ListView) v.findViewById(R.id.urls);
LinkAdapter mListAdapter = ((LinkAdapter)lv.getAdapter()); // this line is giving an error.
mListAdapter.add(new LinkData(name_val, image_val, description_val));
mListAdapter.notifyDataSetChanged();

但代码无效(给NullPointerException

在互联网上搜索了很多,但找不到我问题的具体答案。

2 个答案:

答案 0 :(得分:0)

据我所见,您从未向ListView添加适配器。默认情况下,适配器不会嵌入ListView,因此您需要创建并添加它。

如果你做mListAdapter.setAdapter(YOUR_ARRAY_ADAPTER_GOES_HERE);在你尝试恢复它之前,它应该正常工作。

NPE是因为你无法做到&#34;得到&#34;关于对从未出现过的东西的引用。

答案 1 :(得分:0)

我知道这是一个旧帖子,但我遇到了同样的问题,我通过调试看到ListView上的方法getAdapter()返回一个ListAdapter,可以将其转换为HeaderViewListAdapter。然后在该适配器上可以调用方法getWrappedAdapter(),结果可以在CustomAdapter上生成。

EDIT! 我需要在将数据插入数据库后在列表中添加新项。 我在活动上创建了一个方法,可以在列表中插入我的项目。

private void addItem(Item item) {
  ListView lstView = (ListView) findViewById(R.id.myCustomListView);
  HeaderViewListAdapter adapter = (HeaderViewListAdapter) lstView.getAdapter();

  MyCustomAdapter customAdapter = (MyCustomAdapter) adapter.getWrappedAdapter();

  customAdapter.add(item);
  customAdapter.notifyDataSetChanged();
}

我在数据库中插入Item后调用此方法。