4

インテントを使用してアクティビティ間でいくつかの値を渡すことができることを知っています。ただし、アクティビティ全体を別のアクティビティに渡したい場合、それは良いアプローチではないと思います。それを行う別の方法はありますか?

いくつかの色を変更している設定アクティビティがあります。そのため、メイン アクティビティに戻った後、それらの色を適用したいと思います。これを行うには、Color 値を変更した後に MainActivity フィールドにアクセスする必要があるため、PreferenceActivity 内で. つまり、PreferenceActivity クラスから Main アクティビティ フィールドにアクセスしたいのです。何か案は?

4

4 に答える 4

3

を使用してSharedPreferenceから、メインのアクティビティでそれにアクセスする必要があります。設定アクティビティを正しく実装していないように見えるため、 http://developer.android.com/guide/topics/ui/settings.htmlを読むことをお勧めします。特に関心のある部分は、「読み取り設定」セクションです。ただし、すべてを読んでから、適切な方法で設定を実装することを強くお勧めします。

3つの異なる方法で回答を更新しました(私が考えることができます):

1) を使用して設定アクティビティを開始startActivityForResult()し、 にonActivityResult()アクセスしSharedPreferenceて必要な変更を加えます。こちらをご覧 ください

2) SharedPreferenceChangeListenerMainActivity に a を登録します。これは、に変更が発生したときに呼び出されますSharedPreference詳細 な議論については、こちらを参照してください。 また、私の最初の応答を参照してください。

3) MainActivityonResume()で にアクセスし、SharedPreferenceそこで変更を加えます。私はこの方法が好きではありません。なぜなら、あなたはonResume()より多くのロジックで雑然とし、興味のある変数の状態を追跡する変数も必要になるからです。

コールバックはまさに​​この目的のために作成されたので、個人的にはオプション 2 を使用します。

于 2013-07-05T03:22:14.270 に答える
0

メソッド putExtra(name, value) を使用して値を渡すことができると思います。そして、新しいアクティビティを開始した後、メソッド getStringExtra(name) を使用して、以前に渡した値を取得できます。

于 2013-07-05T02:54:10.690 に答える
-1

多くのアクティビティで多くの変更が必要な場合は、いずれかを変更します。

また、すべてのアクティビティから最終変更データにアクセスし、変更も行います。

例えば。

定数.java

public class Constants
{

    public static String name;
}

MainActivityにはeditTextがあります。

MainActivity.java

public class MainActivity extends Activity {

    private EditText yourName;
    private Button btn;

     @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    yourName = (EditText) findViewById(R.id.yourName);

    btn = (Button) findViewById(R.id.btn);

    btn.setOnClickListener(new OnClickListener()
    {       
        public void onClick(View v)
        {

            Constants.name = yourname.getText().toString();
            Intent intent = new Intent(getApplicationContext(),Activity2.class);
            startActivity(intent);

        }
    });

}

Activity2にはTextViewがあり、Intent を渡さずにMainActivity.javaに入力した値を取得します。

Activity2.java

public class Activity2 extends Activity {

    private TextView yourName;

     @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    yourName = (TextView) findViewById(R.id.tv_yourName);

    // directly use ferom serializable class
    yourname.setText(Constants.name);
}

すべてのアクティビティから多くの値を使用し、すべてのアクティビティから変更するようにします。

于 2013-07-05T05:55:11.467 に答える