2017-06-29 48 views
0

我想在我的Android应用程序应用新LifecycleFragment新LifecycleFragment成分老FragmentTransaction

 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

如何使它工作?从支持库getSupportFragmentManager().beginTransaction().add(...).commit();

+0

你是从支持库还是本地使用片段? –

+0

@an_droid_dev是的,原生。现在我已将每个片段更改为v4 – raiym

回答

4

考虑您的代码段的第一行

+0

的确如此,谢谢。我已将所有片段更改为v4,现在可以使用 – raiym

0

使用片段经理,我猜您正在使用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); 
    } 
} 

另外,切换到片段反向移植(例如,FragmentActivity/LifecycleActivity/AppCompatActivitygetSupportFragmentManager())。