在startactivityforresult和contextmenu更改后刷新活动

时间:2012-05-24 18:02:40

标签: android android-activity

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

    }

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

ViewGroup vg = findViewById (R.id.mainLayout);
vg.invalidate();