2012-01-17 16 views
3

私は3つのアクティビティ:firstActivity,secondActivityおよびthirdActivityを作成しました。アクティビティ間で値を渡す方法

  1. firstActivityが主な活動です。
  2. secondActivityは、SMSを受信した場合にのみ機能し、thirdActivityにメッセージを送信します。
  3. thirdActivityは、文字列値をdouble値に変換し、double値をfirstActivityに送信します。

私はsecondActivityからthirdActivityに値を送ることができますが、私はthirdActivityからfirstActivityに値を渡す方法がわかりません。どうすればいいか教えてください。

+0

は、編集をいただき、ありがとうございます。 – Zephyr

答えて

1

これにはいくつかのアプローチがあります。

カスタムアプリケーションクラスを使用して、アプリケーション全体の「グローバル値」の並べ替えを行います。そのようにして、値をfirstActivityに設定し、thirdActivityで使用します。

Androidアプリケーションでグローバル状態を保存する方法については、this質問をご覧ください。

+0

ありがとうございます、私はそれを勉強したいと思います。 – Zephyr

1

結果を呼び出すアクティビティがある場合は、この場合のようにthirdActivityがある場合はいつでもstartActivityの代わりにstartActivityForResultメソッドを使用できます。 thirdActivityの処理が終了し、結果の値を返す場合は、setResultを呼び出す必要があります。

このアプローチの問題点は、中にsecondActivityがあることです。本当に必要ですか?

+0

はい、必要です。私は、BroadcastReceiverを使用してSMSを受信し、それをthirdActivityに送信します。あなたの答えから、私に例を挙げてもらえますか? – Zephyr

+0

私はあなたがそこでやっていることに対して本当に3つの活動は必要ないと言います。 thirdActivityで行う解析プロシージャは、secondActivityからの「生の」メッセージを取得するたびにfirstActivityで実行できます(これはBroadcastReceiverと推定されます)。 – Bilthon

0

ありがとうございました。今、私はthirdActivityからfirstActivityに値を渡すことができます。これは私のやり方です。

ThirdActivity:

public class ThirdActivity extends Activity { 

double value1, value2; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    ... 

    value1 = Double.parseDouble(value1FromSecondActivity); 
    value2 = Double.parseDouble(value2FromSecondActivity);  

    Intent intent = new Intent(this, FirstActivity.class); 
    intent.putExtra("Value1", value1); 
    intent.putExtra("Value2", value2); 
    startActivity(intent); 
    finish(); 
    } 
} 

FirstActivity:

public class FirstActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    ... 
} 

@Override 
protected void onResume() { 
    Bundle extras = getIntent().getExtras(); 
    if (extras != null) { 
     dValue1 = extras.getDouble("Value1"); 
     dValue2 = extras.getDouble("Value2"); 
     Toast.makeText(getBaseContext(), dValue1 + " : " + dValue2, Toast.LENGTH_SHORT).show(); 
    } 
    else { 
     Toast.makeText(getBaseContext(), "Null", Toast.LENGTH_SHORT).show(); 
    } 
    super.onResume(); 
    } 
} 
関連する問題