0

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

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

4

2 回答 2

0

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

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

NPE 是因为您无法对从未存在的事物的引用进行“获取”。

于 2013-10-02T21:49:43.637 回答
0

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

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

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();
}

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

于 2016-02-08T18:55:13.997 回答