新的LifecycleFragment组件和旧的FragmentTransaction

rai*_*iym 1 android android-fragments

我想LifecycleFragment在我的Android应用程序中应用new :

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

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

如何使它工作?

Com*_*are 9

鉴于你的代码片段的第一行,我猜你正在使用android.app.FragmentManager,并且历史上你一直在使用本机片段(android.app.Fragment).LifecycleFragment继承自片段backport(android.support.v4.app.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);
  }
}
Run Code Online (Sandbox Code Playgroud)

或者,切换到片段后端口(例如,FragmentActivity/ LifecycleActivity/ AppCompatActivity,getSupportFragmentManager()).