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
)
在互联网上搜索了很多,但找不到我问题的具体答案。
答案 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后调用此方法。