我是android编程的新手。
我尝试从数据库填充ListFragment,效果很好
我可以显示值,但是当我尝试通过再次分离和附加片段来刷新视图时,得到的错误内容视图尚未在我放在onActivityCreated上的getListView()上创建。
有什么想法吗?
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
listView = getListView();
db = new DatabaseAccess(getActivity().getApplicationContext());
List<Contact> contacts = db.getAllContacts();
if (contacts.size() > 0) {
List<Map<String, String>> contactList = new ArrayList<Map<String, String>>();
for (Contact con : contacts) {
Map<String, String> data = new HashMap<String, String>(2);
data.put("name", con.getName());
data.put("number", con.getNumber());
contactList.add(data);
}
SimpleAdapter adapter = new SimpleAdapter(getView().getContext(), contactList, android.R.layout.simple_list_item_2, new String[] {"name", "number"}, new int[] {android.R.id.text1, android.R.id.text2});
listView.setAdapter(adapter);
} else {
setEmptyText("Masih belum ada kontak");
}
setListShown(true);
db.closeDB();
}
当我尝试刷新片段时
void refreshFragment() {
Fragment frg = getFragmentManager().findFragmentById(R.id.fragment);
FragmentTransaction fragTransaction = this.getFragmentManager().beginTransaction();
fragTransaction.detach(frg);
fragTransaction.attach(frg);
fragTransaction.commit();
}
答案 0 :(得分:1)
总结:
要刷新列表,您不需要重新创建所有内容,只需更新适配器内容并调用invalidateDataSet函数。
答案 1 :(得分:0)
最后根据@Raanan的建议做了一些正确的事情(我认为),该建议正在填充列表并可以在需要时调用。
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
listView = getListView();
populateList(listView);
}
void populateList(ListView lv) {
db = new DatabaseAccess(getActivity().getApplicationContext());
List<Contact> contacts = db.getAllContacts();
if (contacts.size() > 0) {
List<Map<String, String>> contactList = new ArrayList<Map<String, String>>();
for (Contact con : contacts) {
Map<String, String> data = new HashMap<String, String>(2);
data.put("name", con.getName());
data.put("number", con.getNumber());
contactList.add(data);
}
SimpleAdapter adapter = new SimpleAdapter(getView().getContext(), contactList, android.R.layout.simple_list_item_2, new String[] {"name", "number"}, new int[] {android.R.id.text1, android.R.id.text2});
lv.setAdapter(adapter);
} else {
setEmptyText("Masih belum ada kontak");
}
setListShown(true);
db.closeDB();
}
,刷新方法是
void refreshFragment() {
Fragment frg = getFragmentManager().findFragmentById(R.id.fragment);
if (frg instanceof ScreenContact) {
((ScreenContact) frg).populateList(((ScreenContact) frg).getListView());
}
}
ScreenContact是我从ListFragment派生的片段类。但是当数据为空时,我仍然无法显示&#34; setEmptyText&#34;比如应用程序第一次运行时。