我是一个Android新手,试图把材料设计应用到我的应用程序中。在旧的应用程序中,我调用了“设置”菜单项,加载了一个扩展PreferenceActivity的活动。
为了使其现代化,我正在尝试使用PreferenceFragment,如教程http://www.cs.dartmouth.edu/~campbell/cs65/lecture12/lecture12.html所示
对于API 8,编译器不允许我调用getFragmentManager(),只调用getSupportFragmentManager()。但是编译器不允许我加载新的片段。我的代码如下所示:
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);
}
}
}发布于 2015-06-25 11:59:02
不能简单地在PreferenceFragment中使用API8,因为它是在API11中添加的。它只能通过getFragmentManager()启动。
如果您真的想支持较旧的API,最好还是坚持使用带有内部PreferenceActivity的API。为了继续进行设计,您可以尝试AppCompatPreferenceActivity。
它既可以找到这里,也可以在示例中通过Android导入(我认为)。它保留了首选项功能,但也实现了AppCompatActivity方法。
https://stackoverflow.com/questions/31049346
复制相似问题