我知道我可以使用意图在活动之间传递一些值。但是,如果我想将整个 Activity 传递给另一个 Activity,我认为这不是一个好方法。还有另一种方法吗?
我有设置活动,我正在更改一些颜色。所以在我回到我的主要活动后,我想应用这些颜色。为此,我需要在更改 Color 值后访问 MainActivity 字段,因此在 PreferenceActivity 中。换句话说,我想从 PreferenceActivity 类中访问主要活动字段。有任何想法吗?
我知道我可以使用意图在活动之间传递一些值。但是,如果我想将整个 Activity 传递给另一个 Activity,我认为这不是一个好方法。还有另一种方法吗?
我有设置活动,我正在更改一些颜色。所以在我回到我的主要活动后,我想应用这些颜色。为此,我需要在更改 Color 值后访问 MainActivity 字段,因此在 PreferenceActivity 中。换句话说,我想从 PreferenceActivity 类中访问主要活动字段。有任何想法吗?
您应该使用 aSharedPreference
然后在您的主要活动中访问它。我建议您在http://developer.android.com/guide/topics/ui/settings.html阅读,因为您似乎错误地实施了设置活动。您可能特别感兴趣的部分是“阅读偏好”部分。但是,我强烈建议您通读整个内容,然后以正确的方式实施您的设置。
用 3 种不同的方式(我能想到的)更新答案:
1) 使用 开始您的偏好活动startActivityForResult()
,然后在您的onActivityResult()
访问中SharedPreference
进行必要的更改。看 这里
SharedPreferenceChangeListener
2)向您的 MainActivity注册 a ,当您的SharedPreference
. 有关详细讨论,请参见 此处 。另请参阅我的初步回复。
3)在您的 MainActivity 中onResume()
,访问SharedPreference
然后在那里进行更改。我不喜欢这种方法,因为你会混淆onResume()
更多的逻辑,而且你可能还必须有一个变量来跟踪你感兴趣的变量的状态。
我个人会选择选项 2,因为回调是为此目的而创建的。
可以使用共享偏好。如果您希望立即反映您的更改,请添加侦听器。请参阅 SharedPreferences.onSharedPreferenceChangeListener。这是一个简单的方法。
我认为您可以使用 putExtra(name, value) 方法传递值。在你开始新的活动之后,你可以使用 getStringExtra(name) 方法获取之前传递的值。
如果您想在许多活动中进行大量更改,请从您更改任何一项。
并访问所有活动的最后修改数据并进行修改。
例如。
常量.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);
}
就像您使用所有活动中的许多值并从所有活动中修改一样。