android - 新的 LifecycleFragment 组件和旧的 FragmentTransaction

标签 android android-fragments

我正在尝试在我的 Android 应用程序中应用新的 LifecycleFragment:

        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.fragmentContainer, new CustomBlockUrlProviderFragment());
        fragmentTransaction.addToBackStack("manage_custom_url_providers");
        fragmentTransaction.commit();

fragmentTransaction.replace(R.id.fragmentContainer, new CustomBlockUrlProviderFragment()); 我在这一行遇到了错误。说第二个参数应该是 Fragment

如何让它发挥作用?

最佳答案

鉴于您的代码 fragment 的第一行,我猜您正在使用 android.app.FragmentManager,而且您以前一直在使用原生 fragment (android.app.Fragment )。 LifecycleFragment 继承自 fragments backport (android.support.v4.app.Fragment),您不能在同一个 Activity 中混搭 native 和 backport fragment 。

不过,您可以创建自己的 LifecycleFragment:

import android.app.Fragment;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.LifecycleRegistry;
import android.os.Bundle;
import android.support.annotation.Nullable;

public class LifecycleFragment extends Fragment
  implements LifecycleOwner {
  private LifecycleRegistry registry=new LifecycleRegistry(this);

  @Override
  public Lifecycle getLifecycle() {
    return(registry);
  }

  @Override
  public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    registry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE);
  }

  @Override
  public void onStart() {
    super.onStart();

    registry.handleLifecycleEvent(Lifecycle.Event.ON_START);
  }

  @Override
  public void onResume() {
    super.onResume();

    registry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME);
  }

  @Override
  public void onPause() {
    super.onPause();

    registry.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE);
  }

  @Override
  public void onStop() {
    super.onStop();

    registry.handleLifecycleEvent(Lifecycle.Event.ON_STOP);
  }

  @Override
  public void onDestroy() {
    super.onDestroy();

    registry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY);
  }
}

或者,切换到 fragment 反向端口(例如,FragmentActivity/LifecycleActivity/AppCompatActivitygetSupportFragmentManager() ).

关于android - 新的 LifecycleFragment 组件和旧的 FragmentTransaction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44829423/

相关文章:

android - ionic 应用程序 : Display Google Directions steps

java - 使用谷歌图表在 WebView 中创建图表

android - 使用向上按钮从 Activity 返回到 fragment

android - 识别由于 Android 操作系统导致的应用程序运行缓慢

java - 删除 glClear 后 LibGdx 的奇怪效果

android - 纹理不会出现使用 native 代码在 android 上使用 opengl es 加载它

android - 在许多 fragment 之间向后导航的简单方法是什么?

android - 导航架构 : How to manage proper navigation without using clearTask as it is deprecated

android - editTexts 在旋转设备时更改其值

android - 用线加速度传感器计算距离