回答

1

在活动A中获取字符串值并保存活动B的最佳方式是什么?

这通过取决于你的意思是“保存活动B”

如果你只是想“通”它B并使用它有那么只是在Intent

Intent i = new Intent(..., ...); 
i.putExtra("someKey", someString); 
startActivity(i); 

,并用东西把它在BonCreate()之前没有)像

Intent intent = getIntent(); 
String foo = intent.getStringExtra("someKey"); 

如果你想要它真的坚持下去,那么SharedPreferences会很好。文档中有一个很好的例子。

Intent Docs

SharePreferences

+0

我成功地使用了SharedPreferences,但跳到下一个活动,它没有显示在textview中,只是为了在另一个活动中返回并返回到前一个可见:/ –

+0

看看我连接到的SharedPreferences示例。你只需打开首选项并从那里检索它,你可以在你的'TextView'中使用它 – codeMagic

+0

可以给我一个例子吗? –

1

有不同的方式来处理这个问题,但你其实选择一个取决于你的需要,这个职位介绍,你可以拿得到了不同的方式。

http://www.doepiccoding.com/blog/?p=153

基本上有:

- 共享首

-Intent额外

- 应用子类

-SQLite数据库

他们都是EXP详细排列...

关心!

+0

我成功地使用了SharedPreferences,但跳到下一个活动,它没有显示在textview中,只是为了进入另一个活动并返回到前一个可见:/ –

+0

有“活动私有”首选项和“全局默认“共享首选项,请确保您使用的是整个应用程序范围的应用程序,提供的帖子详细说明了该问题... –

1

您可以在您的意图中存储不同的值。下面是谷歌官方的例子: Google

意向

在活动答:

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); 

Shared Preferences

在活动答:

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 Databases
  • 一个Singleton类(但不总是建议,如果需要持久数据)

有很多方法可以传递数据。但是,哪种类型的实施需要总是取决于情况。如果你希望你的数据只传递给下一个activity/fragment,并且它是临时数据,那么就使用intents。

如果您在应用程序的进一步过程中需要数据,请使用SQLite数据库或SharedPreferences(如果它不是复杂的数据)。保存你的价值,你可以随时随地访问它。

+0

但是,当您关闭应用程序并返回到它时将保存到用户? –

+0

不,那么你将需要共享首选项或SQLite数据库。 – blackfizz

+0

你无法识别哪个应用程序EditText'm打字! –

0

你可以这样做一吨的方式..

一个与首

因此,例如

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,则只需使用意向方法即可。如果你在很多不同的地方需要它,但不想跟踪它?使用首选项。

+0

什么是“背景”? 如何在textview中显示结果? –

+0

上下文可以是任何上下文。尝试使用“this”; 其余的,请查阅一些教程,因为您提出了很多以前已经回答过的基本问题。 https://developer.android.com/training/basics/firstapp/building-ui.html – VicVu

0

非常感谢所有帮助过我的人,我很高兴看到有一些重要的人仍然关心我们。简单的解决方案是在保存按钮的ID之间产生冲突,因为在所有活动中都拥有相同的ID。这就是! 谢谢大家!

0

简单的方式为店铺字符串值,然后在另一个活动恢复是: 1)在第一次活动开始的活动,最返回结果为字符串(之前创建像RETURN_DATA_AS_STRING最终int变量)

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"); 
       } 
      } 
     } 
    } 
相关问题