Android:在活动之间传递值

时间:2012-06-15 07:00:17

标签: android

在我的Android应用程序中,我必须为所有活动使用通用字符串值。 “commonValue”是我想在所有活动中使用的常见字符串值。主要活动的相关代码如下:

public class TestActivity extends Activity {

 public String commonValue;//THE COMMON STRING FOR ALL ACTIVITIES

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    commonValue = "DemoValue";
  }
}

在我的下一个活动中,我创建了一个“TestActivity”类的对象,并尝试将“testValue”字符串分配给另一个名为“str”的字符串

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.testlist);

    TestActivity obj = new TestActivity();//OBJECT OF MAIN ACTIVITY
    String str = obj.commonValue;
 }

但第二个活动中的“str”值不等于我第一个活动中指定的值。为什么那&我怎么能这样做?

谢谢!

8 个答案:

答案 0 :(得分:4)

将您的价值放在string.xml

 <string name="common_value">DemoValue</string>

并在任何类似的活动中使用..

String common_value = getApplicationContext().getString(R.string.common_value);

答案 1 :(得分:3)

开始在您的应用中使用SharedPreferences

在你的第一个活动中你会做

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("commonValue", "DemoValue");
editor.commit();

在你的第二个活动中

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
String str = settings.getString("commonValue", null);

答案 2 :(得分:1)

如果值始终相同,您可以创建public static final变量并通过TestActivity.COMMON_VALUE访问它。

如果你想在活动之间传递一个值,你应该使用Intents并添加一个额外的值和你想传递的值。

答案 3 :(得分:1)

试试这个 -

<强> TestActivity.java

public class TestActivity extends Activity {

 public static String commonValue;//THE COMMON STRING FOR ALL ACTIVITIES

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    commonValue = "DemoValue";
  }
}

另一项活动

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.testlist);

    String str = TestActivity.commonValue;
}

答案 4 :(得分:0)

正如Sana建议的那样,使用SharedPreferences。

或者,使用全局常量类。如果你想坚持你所拥有的,那么你可以尝试: String str = TestActivity.this.commonValue;

您现有的代码正在创建活动的新实例,因此它不会具有您设置的值。

答案 5 :(得分:0)

要在活动之间传递数据,请使用Bundle。和方法,

intent.putExtra()

如果您想将数据设置为应用程序的全局数据,请创建一个应用程序类,并将数据保存在那里。

答案 6 :(得分:0)

我们为每个应用程序都有一个应用程序文件,您可以在那里声明变量,因为应用程序文件可以从任何活动中获取,因此使用公共getter setter并可以获取/设置

developer.android http://developer.android.com/resources/faq/framework.html

提及的那样,你可以提起诉讼。
Singleton class
A public static field/method
A HashMap of WeakReferences to Objects (almost same as my above solution )
Persistent Objects

也看看它们

答案 7 :(得分:0)

commonValue与TestActivity onCreate方法中设置的不相同的原因是因为该函数尚未被调用。

其他人已经提到了解决方案。就像将值放在一个包中一样。