我知道我可以使用intent在Activities之间传递一些值。
但是,如果我想将整个Activity传递给另一个Activity,我认为这不是好方法。
还有另一种方法吗?
我有设置活动,我正在更改一些颜色。所以在我回到主要活动后,我想应用这些颜色。为此,我需要在更改Color值后访问MainActivity字段,因此在PreferenceActivity中。换句话说,我想要访问PreferenceActivity类的Main活动字段。有什么想法吗?
答案 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);
}
就像你使用所有活动中的许多值并从所有活动中修改一样。