为了帮助您,我们需要更多详细信息。
我注意到的第一件事是这条线
Intent intent = new Intent(add_activity.this,MainFragment.class);
startActivity(intent);
finish();
这个问题是你不能用 Intent 开始片段。
如果您想从 MainActivity 开始 TravelActivity,请这样做:
Intent intent = new Intent (this /*indicating your current activity*/, TravelActivity.class /*indicating Activity you want to start*/)
startActivity(intent); //start TravelActivity
finish() //finish current activity - if you press back you will exit the app (if MainActivity was launcher activity)
如果您有在 Travel 活动开始时应该加载的片段,那么下面是一个简单的帮助方法,它将为您执行片段事务
public void replaceFragment(int rootViewId, Fragment fragment, boolean addToBackStack) {
try {
FragmentManager fragmentManager = getSupportFragmentManager();
if (fragment == null)
return;
if (checkIfFragmentIsCurrent(fragment, rootViewId))
return;
String backStateName = fragment.getClass().getSimpleName();
boolean fragmentPopped = fragmentManager.popBackStackImmediate(backStateName, 0);
if (!fragmentPopped) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(rootViewId, fragment);
if (addToBackStack) {
transaction.addToBackStack(fragment.getClass().getSimpleName());
}
transaction.commit();
}
} catch (Exception e) {
Log.e("ReplaceFragment", "Exception: " + e.getMessage());
}
}
protected boolean checkIfFragmentIsCurrent(Fragment fragment, int placeHolderRes) {
Fragment currentFragment = getSupportFragmentManager().findFragmentById(placeHolderRes);
if (fragment != null && currentFragment != null) {
if (fragment.getClass().equals(currentFragment.getClass())) {
return true;
}
}
return false;
}
为了使用它,只需调用replacFragment(将保存您的片段的容器的ID,片段实例,true - 如果您想将片段添加到backStack)
要了解片段交易,请参阅link