Android:从更深的层次结构返回时,意图传递的数据消失了
Android: Data passed with intent disappears when coming back from deeper hierarchy
我有一个包含列表视图的 OverviewActivity。选择一个项目时,将创建一个意图以移动到 DetailActivity 并且我将一个 int 传递给它。
这个int赋值给一个私有变量,用来查询数据库。
详细活动代码:
private int mIssueId;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_issue_detail);
mIssueId = getIntent().getIntExtra(IssueOverviewFragment.INTENT_ISSUE_ID, -1);
...
}
在 DetailActivity 中,我可以转到 GraphActivity。但是当我按下 GraphActivity 中的 upButton 时,应用程序崩溃,因为变量在 DetailActivity 中变为 -1(因此无法正确查询数据库)。
层次结构是:
OverviewActivity -> DetailActivity -> GraphActivity
GraphActivity代码:
protected void onCreate( Bundle savedInstanceState )
{
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_graph );
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
...
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main_detail, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_logout: {
Utility.redirectToLogin(this);
break;
}
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
如何在 DetailActivity 中保留我的 mIssueId 属性的值?
您似乎正在获取默认值,因为在 DetailActivity 中获取意图时出现问题。您可以尝试使用
稍微分解您的请求
mIssueId = getIntent().getExtras().getInt();
但我认为问题可能出在您如何将 int 放入 intent 中。
它应该看起来像
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra(IssueOverviewFragment.INTENT_ISSUE_ID, mIssueId);
startActivity(intent);
Intent 旨在在活动之间传递信息。当Activity1将控制权交给Activity2时,大多与activity.
的行为有关
如果您有信息需要在复杂的层次结构中共享或可用于整个应用程序,如果您需要持久性,则可以在共享首选项之间进行选择,或者如果数据只需要使用单例 class在应用 运行.
期间需要
这是一个单例示例 class 保持信息对整个应用程序可用:
public class AppData {
private static AppData ourInstance = new AppData ();
public int score;
public static AppData getInstance () {
return ourInstance;
}
}
以及如何访问它:
AppData.getInstance().score = 100;
希望对您有所帮助。
我有一个包含列表视图的 OverviewActivity。选择一个项目时,将创建一个意图以移动到 DetailActivity 并且我将一个 int 传递给它。
这个int赋值给一个私有变量,用来查询数据库。
详细活动代码:
private int mIssueId;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_issue_detail);
mIssueId = getIntent().getIntExtra(IssueOverviewFragment.INTENT_ISSUE_ID, -1);
...
}
在 DetailActivity 中,我可以转到 GraphActivity。但是当我按下 GraphActivity 中的 upButton 时,应用程序崩溃,因为变量在 DetailActivity 中变为 -1(因此无法正确查询数据库)。
层次结构是: OverviewActivity -> DetailActivity -> GraphActivity
GraphActivity代码:
protected void onCreate( Bundle savedInstanceState )
{
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_graph );
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
...
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main_detail, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_logout: {
Utility.redirectToLogin(this);
break;
}
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
如何在 DetailActivity 中保留我的 mIssueId 属性的值?
您似乎正在获取默认值,因为在 DetailActivity 中获取意图时出现问题。您可以尝试使用
稍微分解您的请求mIssueId = getIntent().getExtras().getInt();
但我认为问题可能出在您如何将 int 放入 intent 中。
它应该看起来像
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra(IssueOverviewFragment.INTENT_ISSUE_ID, mIssueId);
startActivity(intent);
Intent 旨在在活动之间传递信息。当Activity1将控制权交给Activity2时,大多与activity.
的行为有关如果您有信息需要在复杂的层次结构中共享或可用于整个应用程序,如果您需要持久性,则可以在共享首选项之间进行选择,或者如果数据只需要使用单例 class在应用 运行.
期间需要这是一个单例示例 class 保持信息对整个应用程序可用:
public class AppData {
private static AppData ourInstance = new AppData ();
public int score;
public static AppData getInstance () {
return ourInstance;
}
}
以及如何访问它:
AppData.getInstance().score = 100;
希望对您有所帮助。