Android 安卓:当从更深层次的层次结构返回时,意图传递的数据将消失
我有一个包含listview的OverviewActivity。当选择一个项目时,将创建一个移动到DetailActivity的意图,我将传递一个int 这个int被分配给一个私有变量,用于查询数据库 详细活动代码:Android 安卓:当从更深层次的层次结构返回时,意图传递的数据将消失,android,android-intent,activity-lifecycle,back-stack,up-navigation,Android,Android Intent,Activity Lifecycle,Back Stack,Up Navigation,我有一个包含listview的OverviewActivity。当选择一个项目时,将创建一个移动到DetailActivity的意图,我将传递一个int 这个int被分配给一个私有变量,用于查询数据库 详细活动代码: private int mIssueId; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layo
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);
...
}
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中,我可以转到GraphActivity。但当我在GraphActivity中按下upButton时,应用程序崩溃,因为变量在DetailActivity中变成了-1(因此无法正确查询数据库)
层次结构是:
概览活动->详细活动->图形活动
图形活动代码:
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);
...
}
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);
目的是在活动之间传递信息。当Activity1将控制权传递给Activity2时,控制权主要与activity的行为相关 如果您有需要在复杂层次结构中共享的信息,或者您的整个应用程序都需要这些信息,那么如果您需要持久性,您可以选择共享首选项;如果应用程序运行时只需要这些数据,则可以使用单例类 这是一个保持信息对整个应用程序可用的Singleton类示例:
public class AppData {
private static AppData ourInstance = new AppData ();
public int score;
public static AppData getInstance () {
return ourInstance;
}
}
以及如何访问它:
AppData.getInstance().score = 100;
希望有帮助。发布您的活动代码。您是否覆盖了“向上”按钮功能?可能您正在修改某个地方的意图,请发布您的整个活动代码。此意图来自IssueOverviewFragment,没有问题。但问题是,当我从GraphActivity返回到DetailActivity时,intent的这个额外值并不包含它以前获得的值。