我已经在此stackoverflowapi应用中实现了片段,并且在使用到活动到活动后,我使用了片段。但是,我从工具栏上的UP Buutton转到列表的Initail Fragment的功能。
我以前已经在某种活动中实现了这一点。
现在我紧紧抓住稻草,因为我将所有东西都扔在稻草上,就像onoptionsitemeclectectectectectement retalurount false和Sethasoptionsmenu true这显然无法使用,我离开了,我离开了,为什么我们不能只有一种方法来获得SupportActionBar和SupportActionBar和将其设置为已启用等...显然不是这种情况。
任何帮助,链接,详细说明。
QuestionDetailfragment
public class QuestionDetailsFragment extends BaseFragment implements QuestionDetailViewMvc.Listener, FetchQuestionDetailsUseCase.Listener, BackPressedListener {
private static final String ARG_QUESTION_ID = "ARG_QUESTION_ID";
public static QuestionDetailsFragment newInstance(String questionId) {
Bundle args = new Bundle();
args.putString(ARG_QUESTION_ID, questionId);
QuestionDetailsFragment fragment = new QuestionDetailsFragment();
fragment.setArguments(args);
return fragment;
}
private FetchQuestionDetailsUseCase mFetchQuestionDetailsUseCase;
private BackPressDispatcher mBackPressDispatcher;
private ScreensNavigator mScreensNavigator;
private ToastHelper mMessagesDisplayer;
private QuestionDetailViewMvc mViewMvc;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
setHasOptionsMenu(true);
mFetchQuestionDetailsUseCase = getCompositionRoot().getFetchQuestionDetailsUseCase();
mMessagesDisplayer = getCompositionRoot().getToastHelper();
mBackPressDispatcher = getCompositionRoot().getBackPressDispatcher();
mViewMvc = getCompositionRoot().getViewMvcFactory().getQuestionDetailViewMvc(container);
mScreensNavigator = getCompositionRoot().getScreensNavigator();
return mViewMvc.getRootView();
}
@Override
public void onStart() {
super.onStart();
mFetchQuestionDetailsUseCase.registerListener(this);
mViewMvc.registerListener(this);
mViewMvc.showProgressIndication();
mBackPressDispatcher.registerListener(this);
mFetchQuestionDetailsUseCase.fetchQuestionDetailsAndNotify(getQuestionId());
}
@Override
public void onStop() {
super.onStop();
mFetchQuestionDetailsUseCase.unregisterListener(this);
mViewMvc.unregisterListener(this);
mBackPressDispatcher.unnregisterListener(this);
}
private void bindQuestionDetails(QuestionDetails questionDetails) {
mViewMvc.hideProgressIndication();
mViewMvc.bindQuestion(questionDetails);
}
private String getQuestionId() {
return getArguments().getString(ARG_QUESTION_ID);
}
@Override
public void onQuestionDetailsFetched(QuestionDetails questionDetails) {
bindQuestionDetails(questionDetails);
}
@Override
public void onQuestionDetailsFailed() {
mViewMvc.hideProgressIndication();
mMessagesDisplayer.showUseCaseError();
}
@Override
public void onNavigationUPClicked() {
onBackPressed();
}
@Override
public void onDrawerItemClicked(DrawerItems item) {
switch (item) {
case QUESTIIONS_LIST:
mScreensNavigator.toQuestionsList();
}
}
@Override
public boolean onBackPressed() {
if (mViewMvc.isDrawerOpen()) {
mViewMvc.closeDrawer();
return true;
} else {
return false;
}
}
}
screennavigator.java
public class ScreensNavigator {
private final FragmentManager mFragmentManager;
private final FragmentFrameWrapper mFragmentFrameWrapper;
public ScreensNavigator(FragmentManager mFragmentManager, FragmentFrameWrapper fragmentFrameWrapper) {
this.mFragmentManager = mFragmentManager;
this.mFragmentFrameWrapper = fragmentFrameWrapper;
}
public void toQuestionDetails(String questionId) {
FragmentTransaction ft = mFragmentManager.beginTransaction();
ft.addToBackStack(null);
ft.replace(mFragmentFrameWrapper.getFragmentFrame().getId(), QuestionDetailsFragment.newInstance(questionId)).commit();
}
public void toQuestionsList() {
mFragmentManager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
FragmentTransaction ft = mFragmentManager.beginTransaction();
ft.replace(mFragmentFrameWrapper.getFragmentFrame().getId(), QuestionsListtFragment.newInstance()).commit();
}
public void navigateUpToList() {
// here I would like to some help..........................
}
}
在此类中,我最初使用上下文,但是在重构片段后,它没有帮助,因此我将其删除.............................................................................
底层
public class BaseFragment extends Fragment {
private ControllerCompositionRoot mControllerCompositionRoot;
protected ControllerCompositionRoot getCompositionRoot() {
if(mControllerCompositionRoot == null) {
mControllerCompositionRoot = new ControllerCompositionRoot(
((CustomApplication) requireActivity().getApplication()).getCompositionRoot(),
requireActivity()
);
}
return mControllerCompositionRoot;
}
}
我将在此处添加仓库
github
预先感谢。
我认为您的问题可能是您在按UP Botton时正在调用mActivity.onBackPressed();
。onBackPressed
默认情况下结束当前Activity
。当您将应用程序实施为多个活动时,onBackPressed()
杀死了最后一个Activity
,但是当您以Fragments
实现它时,它现在杀死的杀死比您想要的更多。
我尝试运行您的应用程序,并且在Android 24模拟器上测试时,工具栏中的按钮似乎将我带回主页。我认为这是您最初想要的,因此,如果第一部分没有帮助您,请让我知道您要按钮做什么。