- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我通读了 Android Activity 生命周期文档,我认为我这样做是对的,但它不起作用。有一个 courseId
,我用它来生成我的 Activity_Course.class 的内容。当我单击此 Activity 的 ListView 中的项目时,它会将我带到另一个 Activity 。当我导航回“向上”到 Activity_Course 时,我想维护那个 courseId
以便我可以再次使屏幕膨胀。
我的 onSaveInstanceSTate()
覆盖在导航到新 Activity 时似乎按预期工作。但是当我返回到原始 Activity 时,onCreate()
声称它接收到的 savedInstanceState 是 null
。我错过了什么?
第一个和最后一个方法是我的重点,但我已经包括了所有的上下文。
public class Activity_Course extends ActionBarActivity {
static final String COURSE_ID = "Activity_Course.COURSE_ID";
public int courseId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_course);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.course_activity_frame, new CourseActivityFragment()).commit();
Intent intent = getIntent();
courseId = intent.getIntExtra(MainFragment.COURSE_ID, 0);
System.out.println("the saved state was null"); // This prints!
} else {
courseId = savedInstanceState.getInt(COURSE_ID);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.course, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public static class CourseActivityFragment extends Fragment {
View rootView;
int courseId;
DBAdapter db;
ListView GradeTypeListView;
Adapter_GradeTypeList gtAdapter;
public final static String CATEGORY_ID = "MY_CATEGORY_ID";
public ArrayList<Category> gradeTypeList = new ArrayList<Category>();
public CourseActivityFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.activity_course_fragment,
container, false);
db = new DBAdapter(this.getActivity());
courseId = ((Activity_Course) this.getActivity()).courseId;
db.open();
Course course = db.getCourse(courseId);
db.close();
TextView header = (TextView)rootView.findViewById(R.id.course_header);
((TextView) rootView.findViewById(R.id.course_semester)).setText(course.getSemesterString());
header.setText(course.getTitle());
LinearLayout catHeader = (LinearLayout) rootView.findViewById(R.id.linLayCatheader);
TextView tv = (TextView)catHeader.findViewById(R.id.category_column);
TextView tv2 = (TextView)catHeader.findViewById(R.id.weight_column);
TextView tv3 = (TextView)catHeader.findViewById(R.id.gradecount_column);
TextView tv4 = (TextView)catHeader.findViewById(R.id.percentage_column);
tv.setText(R.string.cat_header);
tv2.setText(R.string.weight_header);
tv3.setText(R.string.count_header);
tv4.setText(R.string.percent_header);
setListData();
Resources res = getResources();
GradeTypeListView = (ListView) rootView.findViewById(R.id.gtListView);
gtAdapter = new Adapter_GradeTypeList(this.getActivity(), gradeTypeList, res, this);
GradeTypeListView.setAdapter(gtAdapter);
System.out.println("how many? " + GradeTypeListView.getChildCount());
View v = GradeTypeListView.getChildAt(2);
return rootView;
}
public void setListData()
{
db.open();
Category[] gt = db.getCategoriesInCourse(courseId);
db.close();
if(gt!=null){
for(int i = 0; i < gt.length; i++) {
gradeTypeList.add(gt[i]);
}
}
}
public void onItemClick(int position){
System.out.println(gradeTypeList.get(position).getType());
System.out.println("taken from adapter is, title is.. " + gtAdapter.getItem(position).getType());
Intent i = new Intent(this.getActivity(), Activity_Category.class);
i.putExtra(CATEGORY_ID, gtAdapter.getItem(position).getCourseId());
i.putExtra(MainFragment.COURSE_ID, courseId);
startActivity(i);
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState){
savedInstanceState.putInt(COURSE_ID, courseId);
// this print shows correctly!
System.out.println("courseId I'm saving is... " + courseId);
super.onSaveInstanceState(savedInstanceState);
}
}
最佳答案
您在 fragment 的 onCreate 中缺少 setRetainInstance(true)
关于android - 为什么在重新创建 Activity 时我的 savedInstanceState 为 Null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23234295/
相当简单的问题,但我无法在任何地方找到明确的答案。 fragment 的savedInstanceState和 fragment 的父activity(或封装 fragment )的savedInst
我在获取 Activity 状态时遇到问题。我有 2 个 Activity :MainActivity 和 Activity2。在 MainActivity 中,我放了一个 editText 和一个
我想在与另一台设备“同步”时获取当前系统时间。因此,此 Activity 通常在同步后立即调用/显示。 目前,当前系统时间是正确的,但我还弹出另一个 Activity 的警报,一旦我完成该 Activ
在 Google Api 示例代码中,他们有一个关于保存状态的非常简单的示例。我需要这个来处理屏幕旋转。 我的问题是我不明白方法 getSavedText() 和 setSaveText() 是从哪里
我有一个秒表应用程序,它只有一项 Activity 。三个按钮启动、停止、重置和一个显示计时器的 TextView 。这是我的代码: public class StopwatchActivity ex
我有一个 ViewPager,其中包含用户输入不同输入的一些 fragment 。其中一个 fragment 包含一个 DatePicker 和一个 TimePicker ,我将其存储(当用户选择了日
如果我没有显式调用 onSaveInstanceState(),当 onCreate 中的 savedInstanceState 不为 null 时,这是可能的吗? 我看到一个选项,当系统在崩溃后重新
所以我的 OnsavedInstanceState 中有这段代码 @Override public void onSaveInstanceState(Bundle savedInstanceState
我正在制作一个 Android 应用程序,但我一直遇到一个奇怪的错误。游戏结束后,如果您点击手机上的“返回”按钮,您将回到完成的游戏并继续玩!! 如何防止这种情况发生?有没有办法删除之前的SavedI
我刚开始使用 Android,我遇到了以下问题: 我正在尝试在打开新 Activity 时保存 InstanceState,并且我需要在 Activity 返回可见状态时恢复该状态。 这是我的 onS
在我的主要 Activity 中有一些代码说 if (savedInstanceState != null) { mCurrentSelectedPosition = save
我是 Android 的新手,我在使用 savedInstanceState 和管理生命周期时遇到了一些麻烦。 http://developer.android.com/guide/topics/fu
我有以下情况: Activity A 启动 Activity B Activity A 调用 onPause、onSaveInstanceState 和 onStop 方法。 在 Activity B
据我了解,Activity 会自动保存 View 的状态,而 EditText 和 TextView 之类的东西会自动恢复它们的状态。 这不适用于可见性吗? 例如:如果默认情况下在 XML 中,我有一
我是 Android 开发的新手,但我对 OOP 概念有一些了解。我正在尝试从 Java 的角度学习 Android。 我了解到第9行onCreate()里面的savedInstanceState是B
因此,Activity.onCreate() 将一个Bundle 作为参数,默认情况下它被称为savedInstanceState。 savedInstanceState 是否在应用更新到较新版本时保
这是我保存的InstaceState 代码: @Override public void onSaveInstanceState(Bundle savedInstanceState) { sa
我在 ViewPager 中有一个 fragment 。 Fragment 包含一个 RecyclerView(想想 ListView)。当用户离开然后返回到 fragment 时,无论用户离开列表的
我只是想通过这个简单的例子来了解 Activity 的生命周期,方法是找出如何取回 SomeIntegers g_values 对象和其中的 ArrayList AnInteger 对象。 事实上,它
我正在使用 onSaveInstanceState 方法来存储和检索 fragment 内的局部变量。我的一个 fragment 中有以下代码(简化): private final SimpleDat
我是一名优秀的程序员,十分优秀!