首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在API 8中调用PreferenceFragment方法

在API 8中调用PreferenceFragment方法
EN

Stack Overflow用户
提问于 2015-06-25 11:40:35
回答 1查看 296关注 0票数 0

我是一个Android新手,试图把材料设计应用到我的应用程序中。在旧的应用程序中,我调用了“设置”菜单项,加载了一个扩展PreferenceActivity的活动。

为了使其现代化,我正在尝试使用PreferenceFragment,如教程http://www.cs.dartmouth.edu/~campbell/cs65/lecture12/lecture12.html所示

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

代码语言:javascript
复制
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下面得到一条红线,并得到以下错误消息:

代码语言:javascript
复制
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)

我做错了什么?据我所知,替换中的第二个论点是正确的。

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

代码语言:javascript
复制
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);
        }
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-25 11:59:02

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

如果您真的想支持较旧的API,最好还是坚持使用带有内部PreferenceActivity的API。为了继续进行设计,您可以尝试AppCompatPreferenceActivity

它既可以找到这里,也可以在示例中通过Android导入(我认为)。它保留了首选项功能,但也实现了AppCompatActivity方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31049346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档