从片段创建片段而不使用片段管理器

时间:2016-06-21 16:53:24

标签: android android-fragments

我试图用这样的代码调用一个片段

SettingsFragment fragment = new SettingsFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
    .replace(R.id.fragment_container, fragment, SETTINGS_FRAGMENT_TAG)
    .commit();

但是,因为我改变了#34;扩展Fragment" to" PreferenceFragment"在我的SettingFragment中,我使用

public class SettingsFragment extends PreferenceFragment {}

这一行给我的错误是我的第二个参数"片段"需要" android.support.v4.app.Fragment"添加此lib后,它仍无法正常工作

.replace(R.id.fragment_container, fragment, SETTINGS_FRAGMENT_TAG)

看起来我的fragmentManager让我的片段感到困惑......有没有办法解决这个问题,甚至没有使用fragmentManager?感谢

2 个答案:

答案 0 :(得分:0)

PreferenceFragment扩展android.app.Fragment。要使用支持FragmentManager,您必须使用扩展android.support.v4.app.Fragment的类,如@NoChinDeluxe建议的那样。

我建议使用v7 Preference Support Libarary

compile 'com.android.support:preference-v7:24.0.0'

此库包含PreferenceFragmentCompat类,其扩展为android.support.v4.app.Fragment。因此,您可以扩展此类,而不是PreferenceFragment来使用支持SettingsFragment的{​​{1}}。

答案 1 :(得分:0)

由于您的//run the stored procedure $result = mysqli_query($connection, "CALL YourIfConditionSP") or die("Query fail: " . mysqli_error()); 继承自SettingsFragment,这意味着它基本上 PreferenceFragment。这意味着无论PreferenceFragment继承了什么,您的PreferenceFragment也将是这样。

因此,解决方案是确保您的SettingsFragment继承正确的PreferenceFragment类。换句话说,在Fragment文件的顶部,您应该PreferenceFragment而不能导入其他片段。这将使您的import android.support.v4.app.Fragment; PreferenceFragment成为android.support.v4.app.Fragment,这样就可以使SettingsFragment成为您发布的代码。