将一个Activity的引用传递给另一个Activity

时间:2013-07-05 02:48:10

标签: android android-intent android-activity preference

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

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

4 个答案:

答案 0 :(得分:3)

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

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

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

2)向您的MainActivity注册SharedPreference,当您onResume()发生任何更改时,系统会调用该活动。 请参阅 here 进行详细讨论。另请参阅我的初步回复。

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

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

答案 1 :(得分:0)

我认为您可以使用方法putExtra(name,value)传递该值。 在开始新活动之后,您可以使用方法getStringExtra(name)获取之前传递的值。

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

如果您想要在许多活动中进行大量更改,请更改任何一项。

并访问所有活动的最后修改数据并进行修改。

例如。

<强> Constants.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);
}

就像你使用所有活动中的许多值并从所有活动中修改一样。