4

我知道我可以使用意图在活动之间传递一些值。但是,如果我想将整个 Activity 传递给另一个 Activity,我认为这不是一个好方法。还有另一种方法吗?

我有设置活动,我正在更改一些颜色。所以在我回到我的主要活动后,我想应用这些颜色。为此,我需要在更改 Color 值后访问 MainActivity 字段,因此在 PreferenceActivity 中。换句话说,我想从 PreferenceActivity 类中访问主要活动字段。有任何想法吗?

4

4 回答 4

3

您应该使用 aSharedPreference然后在您的主要活动中访问它。我建议您在http://developer.android.com/guide/topics/ui/settings.html阅读,因为您似乎错误地实施了设置活动。您可能特别感兴趣的部分是“阅读偏好”部分。但是,我强烈建议您通读整个内容,然后以正确的方式实施您的设置。

用 3 种不同的方式(我能想到的)更新答案:

1) 使用 开始您的偏好活动startActivityForResult(),然后在您的onActivityResult()访问中SharedPreference进行必要的更改。 这里

SharedPreferenceChangeListener2)向您的 MainActivity注册 a ,当您的SharedPreference. 有关详细讨论,请参见 此处 另请参阅我的初步回复。

3)在您的 MainActivity 中onResume(),访问SharedPreference然后在那里进行更改。我不喜欢这种方法,因为你会混淆onResume()更多的逻辑,而且你可能还必须有一个变量来跟踪你感兴趣的变量的状态。

我个人会选择选项 2,因为回调是为此目的而创建的。

于 2013-07-05T03:22:14.270 回答
0

可以使用共享偏好。如果您希望立即反映您的更改,请添加侦听器。请参阅 SharedPreferences.onSharedPreferenceChangeListener。这是一个简单的方法。

于 2013-07-05T06:20:37.543 回答
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,并且您在MainActivity.java中输入的值没有传入 Intent。

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 回答