gpt4 book ai didi

android - 额外的东西似乎丢失了 onResume()

转载 作者:太空狗 更新时间:2023-10-29 16:21:18 28 4
gpt4 key购买 nike

我有一个 Intent,它通过一个长的 Extra 从我的数据库中获取信息。它还通过 String Extra 设置 Activity 的标题。

现在,当我第一次启动 Activity 时,一切都完美显示。但是我有另一个 Activity 用于添加新的数据库项目。问题是,当我按下后退按钮(操作栏中带有箭头的 Logo )时,返回到原始 Activity ,似乎 Extras 消失了,因为标题和 ListView 是空的。

这是启动时显示 ListView 没有问题的 Activity:

DaysActivity.java:

package com.gauvion.gfit;

import android.annotation.SuppressLint;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

public class DaysActivity extends ListActivity {

private DaysDataSource datasource;
private SimpleCursorAdapter dataAdapter;
private boolean isEditing = false;
private Toast toast_deleted;
private String[] columns = new String[] { MySQLiteHelper.COLUMN_NAME, MySQLiteHelper.COLUMN_DAY };
private int[] to;
private long routineDataID;
private String routineDataName;

@SuppressLint("ShowToast")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_days);
routineDataID = getIntent().getLongExtra("routineDataID", 1);
routineDataName = getIntent().getStringExtra("routineDataName");
setTitle(routineDataName);

toast_deleted = Toast.makeText(this, "", Toast.LENGTH_SHORT);
datasource = new DaysDataSource(this);
datasource.open();

Cursor cursor = datasource.fetchAllDays(routineDataID);
to = new int[] { R.id.listitem_day_name, R.id.listitem_day_day };
dataAdapter = new SimpleCursorAdapter(this, R.layout.listitem_day, cursor, columns, to, 0);
setListAdapter(dataAdapter);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_days, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
Cursor cursor = datasource.fetchAllDays(routineDataID);
switch (item.getItemId()) {
case R.id.button_days_add:
Intent startDayAdd = new Intent(this, DayAddActivity.class);
startDayAdd.putExtra("routineDataID", routineDataID);
this.startActivity(startDayAdd);
return true;

case R.id.button_days_edit:
to = new int[] { R.id.listitem_day_edit_name, R.id.listitem_day_edit_day };
dataAdapter = new SimpleCursorAdapter(this, R.layout.listitem_day_edit, cursor, columns, to, 0);
setListAdapter(dataAdapter);

isEditing = true;
invalidateOptionsMenu();
return true;

case R.id.button_days_edit_done:
to = new int[] { R.id.listitem_day_name, R.id.listitem_day_day };
dataAdapter = new SimpleCursorAdapter(this, R.layout.listitem_day, cursor, columns, to, 0);
setListAdapter(dataAdapter);

isEditing = false;
invalidateOptionsMenu();
return true;

default:
return super.onOptionsItemSelected(item);
}
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);

menu.findItem(R.id.button_days_edit).setVisible(!isEditing);
menu.findItem(R.id.button_days_edit_done).setVisible(isEditing);

return true;
}

@Override
protected void onResume() {
datasource.open();
Cursor cursor = datasource.fetchAllDays(routineDataID);
dataAdapter.changeCursor(cursor);

super.onResume();
}

@Override
protected void onPause() {
datasource.close();
super.onPause();
}

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);

savedInstanceState.putLong("routineDataID", routineDataID);
savedInstanceState.putString("routineDataName", routineDataName);
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);

routineDataID = savedInstanceState.getLong("routineDataID");
routineDataName = savedInstanceState.getString("routineDataName");
}

}

如您所见,我什至尝试过使用 onSaveInstanceState()onRestoreInstanceState()。也许我没有正确使用它们?

这是我要用来添加新日期的 Activity :

DayAddActivity.java:

package com.gauvion.gfit;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v4.app.NavUtils;

public class DayAddActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_day_add);
getActionBar().setDisplayHomeAsUpEnabled(true);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_day_add, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}

}

它现在什么都不做。但正如我所说,当我单击后退按钮(操作栏中的 Logo )时,它会返回到 DaysActivity,但标题和 ListView 为空。 DayAddActivity 的分层父级是 DaysActivity。

DayAddActivity 将有一个“保存”按钮,它将新的一天添加到数据库,然后 finish()。如果我现在不解决这个问题,我想我会再次遇到这个问题。

最佳答案

你几乎做对了。当 Activity 即将结束时,您放置在 onSaveInstanceState() 中的所有内容都必须在 onCreate() 方法内的 Activity 的新实例中获得。

你应该有这样的东西:

@SuppressLint("ShowToast")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_days);

Bundle bundle = savedInstanceState != null ? savedInstanceState : getIntent().getExtras();
routineDataID = bundle.getLongExtra("routineDataID", 1);
routineDataName = bundle.getStringExtra("routineDataName");
setTitle(routineDataName);

//other stuff
}

所以,是的,基本上 getIntent() 方法是在首次显示您的 Activity 时使用的。之后,您将获得保存在 onSaveInstanceState() 中的额外内容。

关于android - 额外的东西似乎丢失了 onResume(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14041362/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com