【发布时间】:2014-02-13 19:13:21
【问题描述】:
在活动 A 中获取字符串值并将其保存在活动 B 中的最佳方法是什么?
我认为Intents和SharedPreferences之间可能有关系!
有人吗?
【问题讨论】:
标签: android android-intent android-activity sharedpreferences
在活动 A 中获取字符串值并将其保存在活动 B 中的最佳方法是什么?
我认为Intents和SharedPreferences之间可能有关系!
有人吗?
【问题讨论】:
标签: android android-intent android-activity sharedpreferences
在活动 A 中获取字符串值并将其保存在活动 B 中的最佳方法是什么?
这取决于您所说的“保存活动 B”是什么意思
如果您只想将其“传递”给B 并在那里使用它,那么只需发送Intent
Intent i = new Intent(..., ...);
i.putExtra("someKey", someString);
startActivity(i);
并在B(而不是在onCreate()之前)使用类似的东西
Intent intent = getIntent();
String foo = intent.getStringExtra("someKey");
如果您希望它真正持续存在,那么SharedPreferences 会很好。文档中有一个很好的例子。
【讨论】:
SharedPreferences 示例。您只需打开首选项并从那里检索它,您就可以在TextView 中使用它
有不同的方法来解决这个问题,但您选择的方法实际上取决于您的需求,这篇文章解释了您可以采取的不同方法。
http://www.doepiccoding.com/blog/?p=153
基本上有:
-共享首选项
-Intent Extras
-应用子类
-SQLite 数据库
都详细解释了...
问候!
【讨论】:
您可以在 Intent 中存储不同的值。这是官方的谷歌示例: Google
意图
在活动 A 中:
public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
Intent intent = new Intent(this, ActivityB.class);
String message = "Your String";
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
在活动 B 中:
Intent intent = getIntent();
String message = intent.getStringExtra(ActivityA.EXTRA_MESSAGE);
在活动 A 中:
private static final String PREV_STRING_VALUE = "prevStringValue";
String value = "yourString";
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
sp.edit().putString(PREV_STRING_VALUE, value).apply();
在活动 B 中:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
String value = sp.getString(ActivityA.PREV_STRING_VALUE, "DefaultValue");
或其他一些方法:
有很多方法可以传递您的数据。但是您需要哪种类型的实现始终取决于具体情况。如果您希望您的数据只传递给下一个活动/片段并且它是临时数据,那么只需使用意图。
如果您在应用的进一步处理过程中需要数据,请使用 SQLite 数据库或 SharedPreferences(如果不是复杂数据)。保存您的价值,您可以随时随地访问它。
【讨论】:
您可以通过多种方式做到这一点..
有偏好的人
例如
int myVal = 16;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
prefs.edit().putInt("MY_KEY",myVal).commit();
那么,在你的下一个活动中
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
prefs.getInt("MY_KEY", 0); //Where 0 is the default value
如你所说,你也可以使用意图
int myVal = 16
Intent intent = new Intent(); //Make your intent as you normally would
intent.putExtra("MY_KEY", myVal);
在您的下一个活动的onCreate() 中:
int myVal = getIntent().getExtras().getInt("MY_VALUE");
但是,这些是基本的实现。正如 Artoo Detoo 所说,有很多不同的方法可以做到这一点。您可以使用片段、静态类、其他捆绑包等来执行此操作。这取决于具体情况——最好使用意图方式,这样您就不会无缘无故地将值存储在首选项中。如果您只需要它从活动 A 转到活动 B,只需使用意图方法即可。如果您在许多不同的地方需要它但又不想跟踪它?使用首选项。
【讨论】:
非常感谢所有帮助过我的人,我很高兴看到还有重要的人仍然关心我们。简单的解决方案是保存按钮的 id 之间的冲突,因为在所有活动中拥有相同的 id。Apenas 这个! 谢谢大家!
【讨论】:
在另一个活动中存储字符串值和恢复的简单方法是: 1)在第一个活动开始活动中,大多数返回结果为字符串(在创建最终 int 变量之前,如 RETURN_DATA_AS_STRING)
Intent intent = new Intent(getApplicationContext(), ReturningResultActivity.class);
startActivityintent(intent,RETURN_DATA_AS_STRING);
2) 在存储数据的下一个活动中进行下一步:
Intent intent = new Intent();
intent.putExtra("SomeStringIdentifier", "this is resulting string");
setResult(RESULT_OK,intent);
3) 在第一个活动中覆盖 onActivityResult():
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case RETURN_DATA_AS_STRING: {
String thisIsResultStringFromAnotherActivity = data.getStringExtra("SomeStringIdentifier");
}
}
}
}
【讨论】: