Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓:当从更深层次的层次结构返回时,意图传递的数据将消失_Android_Android Intent_Activity Lifecycle_Back Stack_Up Navigation - Fatal编程技术网

Android 安卓:当从更深层次的层次结构返回时,意图传递的数据将消失

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

我有一个包含listview的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);
    ...
}
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的这个额外值并不包含它以前获得的值。