【问题标题】:Set intent when returning to parent activity返回父活动时设置意图
【发布时间】:2014-06-21 13:58:55
【问题描述】:

我之前询问过的应用程序需要特定活动的 ID,该 ID 用于进行数据库查询。当活动开始时,我从意图中获取此 ID,因此:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_counting);

    Bundle extras = getIntent().getExtras();
    if(extras !=null)
    {
      project_id = extras.getLong("project_id");
    }
    // ... the rest of the initialisation follows here
}

此活动 (CountingActivity) 反过来通过用户交互 (EditProjectActivity) 启动另一个活动,该交互以 CountingActivity 作为父项,以便通过主页按钮导航返回。在 AndroidManifest.xml 我有这个:

    <activity
        android:name="myproject.EditProjectActivity"
        android:label="@string/title_activity_edit_project"
        android:theme="@style/Theme.AppCompat"
        android:parentActivityName="myproject.CountingActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="CountingActivity" />
    </activity>

当用户完成编辑后,他们可以做以下三件事之一:

  1. 按“保存”按钮。数据被保存,finish() 被调用并且 CountingActivity 返回。
  2. 按 Android 后退按钮。 EditProjectActivity 从堆栈中弹出而不保存,并且计数活动返回。
  3. 按左上角的应用程序图标。不知何故,CountingActivity 是在没有 project_id 意图的情况下启动的;该值最终被设置为 0,并且在数据库中找不到任何内容,结果不理想。

不知何故,我需要确保在导航回父活动时将 project_id 作为意图传递。我没有运气就试过了:

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    int id = item.getItemId();
    if (id == R.id.home) // I also tried R.id.homeAsUp
    {
        Intent intent = new Intent(EditProjectActivity.this, CountingActivity.class);
        intent.putExtra("project_id",project_id);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
    }
    return super.onOptionsItemSelected(item);
}

但是,仍然没有 project_id,因此无法进行数据库查询。所以,如果有人能指出我正确的方向,我将不胜感激。

【问题讨论】:

  • 尝试将 project_id 放入包中,然后通过意图传递包,然后接收包,并从该包中获取 prohect _id。为我工作。
  • 看来答案其实可以在这里找到:stackoverflow.com/questions/14462456/…

标签: android android-intent android-navigation


【解决方案1】:

使用android.support.PARENT_ACTIVITY时,必须将父activity设置为singleTop或FLAG_ACTIVITY_CLEAR_TOP。否则将创建一个新实例。例如见Android: Activities destroyed unexpectedly, null savedInstanceState

但是,根据使用情况,可能会有更简单的替代方案。如果EditProjectActivity总是从CountingActivity调用(并且从不单独调用)并且您总是想返回那里,最简单的解决方案就是使用:

if (id == R.id.home)
{
    setResult(...); // optional, whether you want to treat this as save/cancel.
    finish();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多