如何导航到可重复使用的活动,然后导航" UP"来电活动?
我有一个 MainActivity ,我打电话:
Intent intent = new Intent(MainActivity.this, ReusableActivity.class);
intent.put("SomeName", SomeData);
startActivity(intent);
我还有 OtherActivity ,也称 ReusableActivity 。
Intent intent = new Intent(OtherActivity.this, ReusableActivity.class);
intent.put("SomeName", SomeData);
startActivity(intent);
在我的 ReusableActivity 中,我有一个工具栏,可以显示" UP"箭头,以便用户可以导航回来。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ReusableActivity);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
如何让ReusableActivity将用户重新发送回正确的呼叫活动?
因此,如果我在OtherActivity上并转到ReusableActivity,当用户按下向上按钮时,它们将返回到OtherActivity
清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myCompany.myApp">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".LoginActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".SearchView"
android:label="@string/title_activity_search_view"
android:parentActivityName=".MainActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="adjustPan|adjustResize">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.myCompany.myApp.MainActivity" />
</activity>
<activity
android:name=".SearchResultsList"
android:label="@string/title_activity_search_results_list"
android:parentActivityName=".SearchView"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.myCompany.myApp.SearchView" />
</activity>
<activity
android:name=".ReusableActivity"
android:label="@string/title_activity_details"
android:parentActivityName=".SearchResultsList"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.myCompany.myApp.SearchResultsList" />
</activity>
<activity
android:name=".OtherActivity"
android:label="@string/title_activity_other"
android:parentActivityName=".MainActivity"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.myCompany.myApp.MainActivity" />
</activity>
</application>
</manifest>
答案 0 :(得分:0)
如果您使用的是android support library
,则可以看到课程NavUtils
来自javadoc
NavUtils为应用程序实现提供帮助程序功能 推荐的Android UI导航模式
参考 http://developer.android.com/intl/es/reference/android/support/v4/app/NavUtils.html
答案 1 :(得分:0)
Engraver实际上是对的,不确定为什么要投票。当您按下ReusableActivity中的UP按钮(工具栏中的后退箭头)时,您可以调用finish()
,ReusableActivity将关闭,最后一个Activity将弹出,它将是图表中的MainActivity或OtherActivity。
也就是说,当按下工具栏中的UP按钮时,您需要覆盖onOptionsItemSelected
以获得通知。
另外,请务必在活动上致电getSupportActionBar().setDisplayHomeAsUpEnabled(true);
以显示向上按钮。
<强> ReusableActivity 强>
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home: // Notice the id for the up button
finish(); // Up button pressed so call finish.
return(true);
}
return(super.onOptionsItemSelected(item));
}
注意:强>
您可能希望从清单中的ReusableActivity中删除元标记,以避免混淆父活动将会是什么,因为它将以编程方式覆盖。
<强>替代强>
如果由于某种原因您不想致电finish()
,则可以开始新的活动。此意图将确保启动上一个活动,因此您无需跟踪。
Intent i = new Intent(this, MainActivity.class);
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);
您应该将启动器活动传递给intent(MainActivity.class),无论实际启动什么活动,intent中的操作和类别将负责启动正确的活动 < / p>
修改强>
由于您在使用它时遇到问题,我添加了此替代方案。
您可以尝试使用另一种方法,当您通过intent启动ReusableActivity时,会调用正在启动ReusableActivity的Activity类,当按下向上按钮时,只需启动Activity:
Intent intent = new Intent(MainActivity.this, ReusableActivity.class);
//the activity you want to start when pressing the up button
intent.put("parent", MainActivity.this);
startActivity(intent);
从OtherActivity启动ReusableActivity时执行相同的操作:
Intent intent = new Intent(OtherActivity.this, ReusableActivity.class);
//the activity you want to start when pressing the up button
intent.put("parent", OtherActivity.this);
startActivity(intent);
现在,当在OptionsActivity上按下向上按钮时,您将能够开始正确的活动。
<强> OptionsActivity 强>
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Class<?> parentActivityClass = (Class<?>)getIntent().getSerializableExtra("parent");
Intent intent = new Intent(this, parentActivityClass);
startActivity(intent);
return(true);
}
return(super.onOptionsItemSelected(item));
}
答案 2 :(得分:-1)
不确定我理解你的问题。当用户按下后退箭头时,只需致电finish()