我之前提出的应用程序需要一个特定活动的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>
当用户完成编辑后,他们可以执行以下三项操作之一:
不知何故,我需要确保在导航回父活动时将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,因此无法进行数据库查询。所以,如果有人能指出我正确的方向,我会很感激。
答案 0 :(得分:3)
使用android.support.PARENT_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();
}