- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 3 个 fragment (HomeFragment、RegisterFragment 和 NewsFragment)。当我单击“后退”按钮时,如何从 NewsFragment 移动到直接 HomeFragment。单击后退按钮时,我不想移动到其他 fragment 。
最佳答案
我制作了一个实用程序类来控制我的 fragment 导航。
这是这个类的样子:
public class FragmentController {
private static final String TAG = FragmentController.class.getCanonicalName();
private static FragmentController mInstance;
private ArrayList<BaseFragment> mFragmentsList;
private BaseActivity mActivity;
private FrameLayout mFragmentContainer;
public FragmentController(BaseActivity activity) {
set(activity);
}
public static FragmentController getInstance(BaseActivity activity) {
if (mInstance == null)
mInstance = new FragmentController(activity);
return mInstance;
}
public static void setInstance(FragmentController mInstance) {
FragmentController.mInstance = mInstance;
}
public void set(BaseActivity activity) {
mActivity = activity;
if (mActivity instanceof MainActivity) {
mFragmentContainer = ((MainActivity) mActivity).getFragmentContainer();
}
mFragmentsList = new ArrayList<>();
}
public void addFirstFragment(BaseFragment fragment) {
mFragmentsList.add(fragment);
}
public void presentFragment(BaseFragment fragment, boolean removeAllFromBackstack) {
try {
Log.d(TAG, "presentFragment: " + fragment.getTagFm());
if (mActivity.getCurrentFocus() != null) {
ViewUtils.hideKeyboard(mActivity.getCurrentFocus());
}
FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.fade_in, R.anim.fade_out);
ft.replace(mFragmentContainer.getId(), fragment, fragment.getTagFm());
ft.addToBackStack(fragment.getTagFm());
ft.commitAllowingStateLoss();
if (mFragmentsList.size() != 0)
if (removeAllFromBackstack) {
if (mFragmentsList.size() == 2) {
mFragmentsList.remove(1);
} else if (mFragmentsList.size() > 2) {
mFragmentsList.subList(1, mFragmentsList.size()).clear();
}
}
if (!isFragmentPresent(fragment))
mFragmentsList.add(fragment);
} catch (Exception e) {
e.printStackTrace();
}
}
public void removeSecondFragment() {
mFragmentsList.remove(1);
}
private boolean isFragmentPresent(BaseFragment fragment) {
for (BaseFragment baseFragment : mFragmentsList) {
if (baseFragment.getTagFm().equals(fragment.getTagFm()))
return true;
}
return false;
}
public BaseFragment getCurrentFragment() {
return mFragmentsList.get(mFragmentsList.size() - 1);
}
public ArrayList<BaseFragment> getFragmentsList() {
return mFragmentsList;
}
现在,我在 Activity 中实例化这个类
mFragmentController = FragmentController.getInstance(this);
现在,我从我的 Activity
onBackPressed()
@Override
public void onBackPressed() {
if (mFragmentController.getFragmentsList().size() == 1) {
finish();
}
else {
mFragmentController.getFragmentsList().remove(mFragmentController.getFragmentsList().size() - 1);
mFragmentController.presentFragment(mFragmentController.getFragmentsList().get(mFragmentController.getFragmentsList().size() - 1), false);
}
}
在FragmentController
类中,您将看到我在BaseFragment
类上使用方法getTagFm()
。这基本上是为了识别 que 中存在哪些 fragment ,哪些不存在。 BaseFragment
类将是这样的:
public class BaseFragment extends Fragment {
public String getTagFm() {
if (this.getClass().getSimpleName().equals(LoginFragment.class.getSimpleName())) {
return Constants.TAG_FRAGMENT_LOGIN;
} else if (this.getClass().getSimpleName().equals(OrderFragment.class.getSimpleName())) {
return Constants.TAG_FRAGMENT_ORDER;
} else if (this.getClass().getSimpleName().equals(ProgramFragment.class.getSimpleName())) {
return Constants.TAG_FRAGMENT_PROGRAM;
}
return Constants.TAG_FRAGMENT_ORDER;
}
}
所有这些 fragment (LoginFragment
、OrderFragment
、ProgramFragment
)都扩展了 BaseFragment
。
希望这对某人有帮助。
关于android - 如何在fragment中实现onBackPressed并到达HomeFragment?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42859097/
我在将 FirestoreUI 与 BottomNavigationBar 连接时遇到问题。我不知道如何实现OnCreateView来修改HomeFragment,如下所示- public class
我正在学习教程,我尝试通过添加适配器将 RecyclerView 添加到其中并在我的 HomeFragment 中显示它,但不幸的是,当我在模拟器上运行该项目时,我的应用程序停止了。 我有我的 Hom
我在这部分代码中遇到错误: private void displayView(int position) { // update the main content by replacing f
我的 Adapter 出错,这是我的代码,错误指向这段代码,它在 HomeFragment.java 上,它说: error: incompatible types: HomeFragment can
这是我的 MainActivity.java 类 package com.example.bottomnavigationdrawer; import androidx.appcompat.app.A
公共(public)类 HomeFragment 扩展 Fragment 实现 HomeView{ private HomeViewModel homeViewModel; public static
我正在尝试通过单击图标打开我在 HomeFragment 的 MainActivity 中创建的 NavigationDrawer。当我单击图标时,我希望抽屉打开...即使我将它放在我的 MainAc
我是一名优秀的程序员,十分优秀!