【发布时间】:2016-02-07 15:28:30
【问题描述】:
在我的 MainActivity 中,我有一个 SlidingTabBar,并从这些选项卡(片段)中打开某些事件的其他活动(如 FAB-onClick)。现在,当我在打开的 Activity 上并按下设备上的后退按钮或操作栏中的 HomeAsUp(后退)按钮时,我想从我打开另一个 Activity 的位置返回 MainActivity 上的 Fragment,但是应用程序刚刚关闭。
我没有任何 onBackPressed 方法,也没有在我打开的活动中的任何地方调用 finsish()。 我只是根据 Fragment 的意图调用它们:
Intent intent = new Intent(getActivity(), OfferActivity.class);
startActivity(intent);
我的 MainActivity 中有这个方法,因为我希望能够使用返回按钮退出应用程序:
@Override
public void onBackPressed() {
finish();
}
我也有一个 LoginActivity,我用这种方式调用 MainActivity(它是一个 FacebookLogin,所以在第一次打开应用程序时只需要一次):
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
如果您需要任何其他代码,请告诉我:)
编辑:这是我如何在 MainActivity 中将片段添加到 TabLayout 的代码:
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new NewsFragment(), "NEWS");
adapter.addFragment(new ProfileFragment(), "PROFILE");
adapter.addFragment(new NotificationFragment(), "NOTIF");
adapter.addFragment(new AboutFragment(), "ABOUT");
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
//return mFragmentTitleList.get(position);
// null -> just use icons
return null;
}
}
编辑 2:这是我的清单:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:name=".adapter.AppController">
<activity
android:name=".main.LoginActivity"
android:label="friendlyride">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".main.MainActivity"
android:label="friendlyride">
</activity>
<activity
android:name=".main.OfferActivity"
android:label="Offer ride"
android:parentActivityName=".main.MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".main.MainActivity"
/>
</activity>
</application>
main.MainActivity 是我的 TabLayout 所在的位置,而 main.OfferActivity 是我想从 Fragment 打开的位置。 main.LoginActivity 具有意图过滤器,因为它是我尚未登录时的第一个 Activity(如果此意图过滤器很重要,我现在不知道 :))
最终编辑: 我刚刚发现了问题。我使用 NO_HISTORY 和 CLEAR_TOP 标志从我的 LoginActivity 打开 MainActivity(从那里打开其他所有内容)。显然这些标志也用于 MainActivity 上的 Intent,即使我没有设置它们。我不知道在以下活动中“记住”了标志,即使我使用没有标志的新 Intent。感谢您的所有回答。 :)
【问题讨论】: