任何帮助都会受到赞赏,因为我差不多完成了这个小小的事情让我非常烦恼!
我在onCreate()
中有三个活动中的一个,它从数据库的查询中填充TextView
。这项活动也是主要活动。您通过操作栏旅行的其他2项活动,如下面的代码所示。我在这里玩savedInstanceState()
和onRestoreInstanceState()
,只有当你完全退出应用程序时它们才有效,这很好,但我也想要它,这样当你从actionBar转到另一个Activity然后TextView
不必重新查询数据库。我希望textview
与您离开时相同,因为每次您离开操作栏时,textView
都会触发一个全新的查询,我不想要这样做。我希望它在用户第一次到达时仍然具有第一个查询的结果。
我尝试使用finish()
和onStop()
方法来帮助终止活动,以便在活动被销毁时调用saveOnInstanceState()
,但它不能正常工作或我没有把它放在正确的地方。请问有什么想法?!?!?!
在onCreate()中应用savedInstanceState:
if(savedInstanceState != null){
String SavedStory = savedInstanceState.getString(SavedStoryHere);
String SavedTitle = savedInstanceState.getString(SavedTitleHere);
OpenningTextView.setText(SavedStory);
TitleTextView.setText(SavedTitle);
}
else{
OpenningTextView.setText(StoryText);
TitleTextView.setText(TitleString);
}
onSavedInstanceState()和onRestoreInstanceState():
protected void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
String text = OpenningTextView.getText().toString();
String titleText = TitleTextView.getText().toString();
savedInstanceState.putString(SavedStoryHere, text);
savedInstanceState.putString(SavedTitleHere, titleText);
}
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
OpenningTextView.setText(savedInstanceState.getString(SavedStoryHere));
TitleTextView.setText(savedInstanceState.getString(SavedTitleHere));
}
通过ActionBar进行不同的活动:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.Openning_Screen:
Toast.makeText(this, "This is the Story of the Day", Toast.LENGTH_SHORT)
.show();
return true;
case R.id.The_List:
Intent A_ListIntent = new Intent(this, A_Where_List.class);
startActivity(A_ListIntent);
return true;
case R.id.Settings:
Intent SavedStoriesIntent = new Intent(this, Settings.class);
startActivity(SavedStoriesIntent);
return true;
default:
return super.onOptionsItemSelected(item);
}
答案 0 :(得分:2)
您所看到的是预期的行为。
调用startActivity(intent)
无法完成/销毁您当前的活动 - 这就是您未被onSaveInstanceState
调用的原因。当用户按下后退按钮时,您的活动将处于离开页面时的状态。
您应该看到的是onPause
/ onResume
要求离开&重新进入您的主要活动。
答案 1 :(得分:2)
我认为您的问题是为您的活动定义的Launch Mode。默认情况下,它允许多个实例,在这种情况下,我认为您需要一个实例。因此,当您“返回”原始活动时,它将是一个新实例,并且不会调用onRestoreInstanceState()。
尝试将清单中的活动的launchMode设置为singleInstance。
android:launchMode="singleInstance"