2つのアクティビティAとBがあり、アクティビティAから、2つの編集テキストフィールドとボタンで構成されるフォームを含むダイアログボックスを開くボタンをクリックします(ダイアログボックスのボタンはアクティビティBを開始するために使用されます) 。したがって、私の質問は、ダイアログボックスを閉じずにアクティビティBからアクティビティAに文字列を渡すにはどうすればよいですか(文字列は2つの編集テキストフィールドの1つに入力するために使用されます)。
5 に答える
変数を格納するクラスを作成する必要があります。ActivityBでは変数の値を設定し、作成されたクラスはそれを格納し、ActivityAでは変数の値を取得します。
クラスGlobalVars.javaを作成します。このクラスにこれを入れてください:
パブリッククラスGlobalVarsはApplication{を拡張します
private static String var2; public static String getVar() { return var2; } public static void setVar(String var) { var2 = var; }
}
ActivityBで、この行を適切な場所に配置します。
String something;
GlobalVars.setVar(something);
ActivityAで、この行を適切な場所に配置します。
String getsomething = GlobalVars.getVar();
以上です!
アクティビティBが結果を返すときにダイアログボックスを保持したいようです。そのような場合は、ダイアログボックスonActivityResultを開くことができます。
- アクティビティA
- ダイアログボックスを開くボタンをクリックします
- アクティビティBを開始します
- 結果をアクティビティAに返します
- onActivityResultはを呼び出します
- ダイアログボックスを再度開く
注:アクティビティAは、SingleTask、SingleInstance、SingleTopであってはなりません。
Bundleと静的グローバル変数とonActivityResult()を使用する必要があると思います。以前のクライアントのクライアントを新しいクライアントに編集する場合。「ClientList」アクティビティと「EditClient」アクティビティがあるとします。
「EditClient」アクティビティに書き込む
Bundle extras = getIntent().getExtras();
if (extras != null)
{
String name = extras.getString(ClientList.KEY_Client);//ClientList.KEY_Client is global static variable of "ClientList" Activity.
if (name != null)
{
nameText.setText(name);//"nameText" is a EditText object represent EditText view
}
}
おそらく、sharedpreferencesを使用してみてください!?
ブロードキャストシステムを使用して、データを含むインテントを別のアクティビティに送信できます。
googleまたはstackoverflowを検索すると、これを実現する方法のチュートリアルと例がたくさんあります。私が理解しているように、アクティビティaに通知を受け取り、ダイアログのアクションに基づいてフィールドに入力する必要があります。
私が提案しているのは、これを行う1つの方法です。他の回答も同じ問題に対して異なる解決策を提供します。また、ダイアログの作成にインターフェイスを登録することもできます。このダイアログは、ダイアログ内から呼び出され、最初のアクティビティで何かを実行します。