0

我正在尝试使用 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);

    }
4

2 回答 2

2

仅在 onResume 中创建列表,每次都会调用它,即使在初始启动时也是如此。

于 2012-05-24T20:14:58.640 回答
1

您是否尝试过在方法返回后使用invalidate() ?

ViewGroup vg = findViewById (R.id.mainLayout);
vg.invalidate();
于 2012-05-24T18:16:49.237 回答