-1

我有一个包含列表视图的 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 属性的值?

4

2 回答 2

0

看起来您正在获取默认值,因为在 DetailActivity 中获取意图时出现问题。你可以试着用

mIssueId = getIntent().getExtras().getInt();

但我认为问题可能在于您如何将 int 放入意图中。

它应该看起来像

Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra(IssueOverviewFragment.INTENT_ISSUE_ID, mIssueId);
startActivity(intent);
于 2017-04-26T15:46:35.703 回答
0

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;

希望能帮助到你。

于 2017-04-26T16:07:35.150 回答