0

startactivityforresult()を使用して連絡先ピッカーを使用しようとしていますが、アクティビティが再開されたら設定ページを更新して、選択した連絡先をデータベースに表示したいと考えています。したがって、私のonResume()はonCreate()と単純に同じです。そこで、onCreateコードをオーバーライドされたonResume()にそのままコピーしました。

私が直面している2つの問題があります-1。リストビューの詳細が重複しています2.更新方法は本質的に非常に冗長なようです

誰かが私の活動をリフレッシュするための良い方法を私に提案できますか?また、コンテキストメニューを使用してリストビューアイテムを削除した後に更新したいのですが、onResume()が複製されていても発生しないようです。

編集:-いくつかの説明

連絡先1を選択すると、リストには連絡先1と連絡先1の2つの項目が表示されますが、データベースには連絡先1の重複しないエントリが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 に答える