我正在尝试使用startactivityforresult()的联系人选择器,并希望在恢复活动后刷新我的设置页面,该活动将在数据库中显示所选的联系人。因此,我的onResume()与onCreate()完全相同。所以我将onCreate代码复制到覆盖onResume()中。
我面对两个问题 - 1.列表视图详细信息正在重复 2.刷新方法本质上似乎非常冗余
有人可以建议我一个很好的方法来刷新我的活动。我还希望在使用contextmenu删除列表视图项后刷新 - 即使重复使用onResume()也不会发生。
编辑: - 一些澄清
在选择联系人1时,列表显示两个项目联系人1和联系人1,尽管数据库有一个非重复的联系人1条目(列表视图旨在显示已复制到数据库的联系人的姓名)。
当活动开始时,列表视图由数据库填充,显示已添加的联系人的姓名。游标接收db列并以编程方式填充listview。我希望每次更改数据库时都会发生这种情况 - 添加新联系人或通过长按一下上下文菜单删除联系人。
冗余是除了简单地将与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);
}
答案 0 :(得分:2)
仅在onResume中创建列表,每次调用它,即使在初始启动时也是如此。
答案 1 :(得分:1)
您的方法返回后是否尝试过使用invalidate()?
ViewGroup vg = findViewById (R.id.mainLayout);
vg.invalidate();