我正在尝试使用 startactivityforresult() 使用联系人选择器,并希望在恢复活动后刷新我的设置页面,该页面显示数据库中的选定联系人。因此,我的 onResume() 与 onCreate() 完全相同。所以我将我的 onCreate 代码原样复制到覆盖的 onResume() 中。
我面临两个问题 - 1. listview 详细信息被复制 2. refresh 方法在本质上似乎非常多余
有人可以建议我刷新我的活动的好方法。我还想在使用 contextmenu 删除列表视图项后刷新 - 即使重复的 onResume() 似乎也不会发生。
编辑: - 一些澄清
在选择联系人 1 时,列表显示两个项目联系人 1 和联系人 1,尽管 db 有一个联系人 1 的非重复条目(列表视图旨在显示已复制到数据库的联系人的名称)。
当活动开始时,列表视图由显示已添加联系人名称的数据库填充。游标接收 db 列并以编程方式填充列表视图。我希望每次更改数据库时都会发生这种情况-通过长按上下文菜单添加新联系人或删除联系人。
冗余是除了简单地将与 onCreate 相同的代码复制到 onResume 之外,还有其他方法(更简洁)。
@Override
protected void onResume() {
super.onResume();
setContentView(R.layout.setting);
TabHost th = (TabHost)findViewById(R.id.tabhost);
th.setup();
spec1 = th.newTabSpec("tag1");
spec1.setIndicator("CONTACTS");
try {
db = this.openOrCreateDatabase("App_Database",MODE_PRIVATE , null);
Cursor cur = db.rawQuery("SELECT NAME FROM Contacts_Table",null);
cur.moveToFirst();
String first = cur.getString(cur.getColumnIndex("NAME"));
if(cur.isNull(cur.getColumnIndex("NAME")) || first.equals(null) ){
setAddContactTab();
}
else{
Log.e("first name" , first);
populateContactsList();
}
}catch(SQLiteException e){
setAddContactTab();
}
th.addTab(spec1);
TabSpec spec2 = th.newTabSpec("tag2");
spec2.setContent(R.id.tab2);
ListView lv = (ListView) findViewById(R.id.variable_list);
lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.variables)));
spec2.setIndicator("VARIABLES");
th.addTab(spec2);
TabSpec spec3 = th.newTabSpec("tag3");
spec3.setContent(R.id.tab3);
et = (EditText) findViewById(R.id.webaddress);
SharedPreferences webad = getSharedPreferences(filename,0);
et.setText(webad.getString("tvalue",""));
spec3.setIndicator("WEBSITE");
th.addTab(spec3);
}