如何在活动中保留变量?

时间:2013-07-01 19:14:10

标签: java android android-intent android-activity

我有一个名为currentFile的File对象。当currentFile已更改且用户尝试打开新文件而不保存时,将显示“保存”对话框,如果单击“是”,则会保存currentFile。我遇到的问题是,当我启动一个新的Activity并按下Android后退按钮时,currentFile设置为null,因此更改文件,尝试打开一个新文件会导致NullPointerException。如何跨活动保持currentFile?

3 个答案:

答案 0 :(得分:3)

有几种方法可以做到这一点,取决于你想做什么,你应该平衡什么更好地满足你的需求,一种方法是使用额外的东西将变量值传递给另一个活动

Bundle extras = new Bundle();
extras.putString(key, value);
Intent intent = new Intent("your.activity");
intent.putExtras(extras);
startActivity(intent);

另一种方法是在应用程序上下文中设置一个变量,创建一个从Application扩展的类,以及使用

从任何活动中获取的引用。
YorApplicationClass app = (YorApplicationClass)getApplication();
app.getYourVariable();

最后我能想到的是使用SharedPreferences,将变量存储为可用于任何活动的键/值对...

            SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
            Editor edit = pref.edit();
            edit.putString(key, value);
            edit.commit();

            //Any activity
            SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
            pref.getString(key, defValue);

问候!

答案 1 :(得分:0)

您可以使用Intents& Extras

String yourFileName = "path/to/your/file"; 
Intent intent = new Intent(currentActivity, newActivity.class);
intent.putExtra("FileName", yourFileName);
startActivity(intent);

然后在您的新活动中:

Bundle extras = getIntent().getExtras();
if (extras != null) {
    String file = extras.getString("FileName");
}

以下是对Intentshttp://developer.android.com/reference/android/content/Intent.html

的一些解读

答案 2 :(得分:0)

您也可以使用Application课程执行此操作。我发现使用它比使用bundle和Intents更容易。

要访问您的应用程序类,只需在任何活动中调用getApplicationContext,然后将其强制转换为扩展Application的类类型,如下所示:

public class MyActivity extends Activity{

    public void onCreate(Bundle bundle){
        MyApplicationClass app = (MyApplicationClass)this.getApplication();
    }
}