Android 为什么在重新创建活动时我的savedInstanceState为空?
我通读了activity lifecycle Android文档,我认为我做得对,但它不起作用。有一个Android 为什么在重新创建活动时我的savedInstanceState为空?,android,android-activity,android-lifecycle,android-navigation,Android,Android Activity,Android Lifecycle,Android Navigation,我通读了activity lifecycle Android文档,我认为我做得对,但它不起作用。有一个courseId,我正在使用它来生成活动课程的内容。当我单击此活动的ListView中的某个项目时,它会将我带到另一个活动。当我导航回“向上”活动课程时,我想保持courseId,以便再次充气屏幕 当导航到新活动时,MyonSaveInstanceSTate()override似乎正在按预期工作。但是当我返回到原始活动时,onCreate()声明它收到的savedInstanceState为nu
courseId
,我正在使用它来生成活动课程的内容。当我单击此活动的ListView中的某个项目时,它会将我带到另一个活动。当我导航回“向上”活动课程时,我想保持courseId
,以便再次充气屏幕
当导航到新活动时,MyonSaveInstanceSTate()
override似乎正在按预期工作。但是当我返回到原始活动时,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);
}
}
公共课堂活动\u课程扩展了ActionBarActivity{
静态最终字符串COURSE\u ID=“Activity\u COURSE.COURSE\u ID”;
公共国际课程ID;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_课程);
如果(savedInstanceState==null){
getSupportFragmentManager().beginTransaction()
.add(R.id.course_activity_frame,new CourseActivityFragment()).commit();
Intent=getIntent();
courseId=intent.getIntExtra(MainFragment.courseId,0);
System.out.println(“保存的状态为空”);//此打印!
}否则{
courseId=savedInstanceState.getInt(课程ID);
}
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.course,menu);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
int id=item.getItemId();
if(id==R.id.action\u设置){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
公共静态类CourseActivityFragment扩展片段{
视图根视图;
int courseId;
DBAdapter-db;
ListView等级类型ListView;
适配器等级类型列表GT适配器;
公共最终静态字符串CATEGORY\u ID=“MY\u CATEGORY\u ID”;
public ArrayList gradeTypeList=新建ArrayList();
公共课程活动片段(){
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
rootView=充气机。充气(R.layout.activity\u course\u片段,
货柜(虚假);;
db=newdbadapter(this.getActivity());
courseId=((活动\课程)this.getActivity()).courseId;
db.open();
Course=db.getCourse(courseId);
db.close();
TextView头=(TextView)rootView.findViewById(R.id.course\u头);
((TextView)rootView.findviewbyd(R.id.course\u学期)).setText(course.getSemesterString());
header.setText(course.getTitle());
LinearLayout catHeader=(LinearLayout)rootView.findviewbyd(R.id.linLayCatheader);
TextView tv=(TextView)catHeader.findViewById(R.id.category_列);
TextView tv2=(TextView)catHeader.findViewById(R.id.weight_列);
TextView tv3=(TextView)catHeader.findViewById(R.id.gradecount_列);
TextView tv4=(TextView)catHeader.findViewById(R.id.percentage_列);
tv.setText(R.string.cat_头);
tv2.setText(R.string.weight_头);
tv3.setText(R.string.count_头);
tv4.setText(R.string.percent_头);
setListData();
Resources res=getResources();
GradeTypeListView=(ListView)rootView.findViewById(R.id.gtListView);
gtAdapter=newadapter\u GradeTypeList(this.getActivity(),GradeTypeList,res,this);
GradeTypeListView.setAdapter(gtAdapter);
System.out.println(“多少?”+GradeTypeListView.getChildCount());
视图v=GradeTypeListView.getChildAt(2);
返回rootView;
}
public void setListData()
{
db.open();
类别[]gt=db.getCategoriesInCourse(courseId);
db.close();
如果(gt!=null){
对于(int i=0;i
您的片段中的onCreate中缺少了setRetainInstance(true)
,我在另一个问题上找到了这个答案。这正是我要找的。