2010-11-19 11 views
0

onCreate()がデータベースにクエリを実行し、クエリ結果をUI上にtextviewsで表示するAndroidアクティビティがあります。他のアクティビティからの変更後のアンドロイド更新アクティビティのテキストビュー

私が抱えている問題は、ユーザーが別のアクティビティを開いてデータベースを更新できることです。彼らが元のアクティビティに戻ると、テキストビューが新しいデータベース情報で更新されるようにしたいと思います(データベースを照会して情報を表示します)。

もう1つのことは、(新しいアクティビティで)ユーザからの新しい入力を受け取り、既存のアクティビティのテキストビューを直接更新することです(既存のアクティビティでデータベースを再クエリする必要はありません)。しかし、私はそのようなことをどうやって行うのかは分かりません。

誰かがこれを行う最善の方法について私に知らせることができますか?これまで私が見つけた唯一の解決策は、放送受信機と関係していますが、それが私がしなければならないことに最も適しているかどうかはわかりません。

アドバイスありがとうございます。ありがとう!

答えて

3

リストビューで表示するデータ量が大きくない場合は、最も簡単な解決策はonResume()メソッドのデータベースで再クエリすることです。このメソッドは、アクティビティがユーザーに再び表示されたときに常に呼び出されます。

BroadcastReceiverは良いことですが、そのような単純な作業のための努力は価値がありません。あなたが行うことができます

+0

ウラジミール、上記の投稿への私のコメントを参照してください。ありがとう! – littleK

+0

テキストビューを更新するためのコードスニペットをご提供ください。 –

+0

ああ、私は間違ってデータベースから取得した値を設定していた。ご協力いただきありがとうございます! – littleK

2

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    db.beginTransaction(); 
    Cursor cur = null; 
    try { 
     cur = db.query("table", 
      null, null, null, null, null, null); 
     cur.moveToPosition(0); 
     String titleString = cur.getString(cur.getColumnIndex("title")); 
     db.setTransactionSuccessful(); 
    } catch (Exception e) { 
     Log.e("Error in transaction", e.toString()); 
    } finally { 
     db.endTransaction(); 
     cur.close(); 
    } 
} 

取引は本当に速いです。 onResume()メソッドを使用してTextviewを塗りつぶすことができます。

+0

データベースを再クエリするためにonResume()を使用しようとしましたが、TextViewでsetText()を呼び出そうとしましたが、更新するようには見えません。 – littleK

0

onResumeでsetTextを使用している場合、ハンドラを介して更新/再描画する必要があります。私が見つけた最も簡単な方法は、基本レイアウトビューを再描画することでした。

LinearLayout myBaseLayout = (LinearLayout)findViewById(R.id.linearlayout01); 
myBaseLayout.invalidate(); 

あなたのハンドラメソッドにあることを確認してください。

関連する問題