我有一个名为currentFile的File对象。当currentFile已更改,并且用户尝试在不保存的情况下打开新文件时,将显示"保存"对话框,如果单击"是",则保存currentFile。我遇到的问题是,当我启动一个新的"活动"并按下Android后退按钮时,currentFile被设置为null,因此更改文件,试图打开一个新文件会导致NullPointerException。如何在活动中保持currentFile?
有几种方法可以做到这一点,根据你想做的事情,你应该权衡什么更适合你的需求,一种方法是使用额外功能将变量值传递给另一个活动
Bundle extras = new Bundle();
extras.putString(key, value);
Intent intent = new Intent("your.activity");
intent.putExtras(extras);
startActivity(intent);
另一种方法是在应用程序上下文中设置一个变量,创建一个从应用程序扩展的类,并且您可以使用从任何活动中获得该类的引用
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);
问候!
您可以使用Intents
&CCD_ 2。
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");
}
以下是关于Intents
的一些阅读:http://developer.android.com/reference/android/content/Intent.html
您也可以使用Application类来完成此操作。我发现使用它比使用捆绑包和意图更容易。
要访问您的应用程序类,只需在任何活动中调用getApplicationContext,并将其强制转换为扩展application的类类型:
public class MyActivity extends Activity{
public void onCreate(Bundle bundle){
MyApplicationClass app = (MyApplicationClass)this.getApplication();
}
}