在API 8中调用PreferenceFragment方法

时间:2015-06-25 11:40:35

标签: java android material-design

我是一名Android新手试图将材料设计应用到我拥有的应用中。在旧的应用程序中,我调用了我的设置菜单条目,加载了一个扩展了PreferenceActivity的活动。

要使其现代化,我尝试使用PreferenceFragment,如教程http://www.cs.dartmouth.edu/~campbell/cs65/lecture12/lecture12.html

中所示

对于API 8,编译器不允许我调用getFragmentManager(),只调用getSupportFragmentManager()。但是编译器不允许我加载新的Fragment。我的代码如下所示:

android.support.v4.app.FragmentManager mFragmentManager = getSupportFragmentManager();
android.support.v4.app.FragmentTransaction mFragmentTransaction = mFragmentManager.beginTransaction();
MainSettingsFragment mPrefsFragment = new MainSettingsFragment();
mFragmentTransaction.replace(android.R.id.content, mPrefsFragment);

我在mPrefsFragment下面出了一条红线,收到以下错误信息:

Wrong 2nd argument type. Found: 'com.src.xxx.MainActivity.MainSettingsFragment', required: 'android.support.v4.app.Fragment'
replace(int,android.support.v4.app.Fragment) in FragmentTransaction cannot be applied
to (int,com.src.xxx.MainActivity.MainSettingsFragment)

我做错了什么?据我所知,替换中的第二个参数是正确的类型。

我的代码的相关部分如下所示:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {        
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);        
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.item_edit_settings:
                android.support.v4.app.FragmentManager mFragmentManager = getSupportFragmentManager();
                android.support.v4.app.FragmentTransaction mFragmentTransaction = mFragmentManager.beginTransaction();
                MainSettingsFragment mPrefsFragment = new MainSettingsFragment();
                mFragmentTransaction.replace(android.R.id.content, mPrefsFragment);
                mFragmentTransaction.commit();
                //startActivity(new Intent(this, EditSettingsActivity.class));
                //new MainSettingsFragment(getSupportFragmentManager(), MainActivity.this));
                return true;            
        }
        return false;
    }

    public static class MainSettingsFragment extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
        }
    }

}

1 个答案:

答案 0 :(得分:1)

您不能简单地在API8中使用PreferenceFragment,因为它是在API11中添加的。它只能通过getFragmentManager()启动。

如果您真的想要支持较旧的API,最好坚持使用内部PreferenceActivity的{​​{1}}。要继续使用该设计,您可以尝试Fragment

可以找到here和您可以通过Android Studio导入的示例(我认为)。它保留了Preference功能,但也实现了AppCompatPreferenceActivity方法。