我是一名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);
}
}
}
答案 0 :(得分:1)
您不能简单地在API8中使用PreferenceFragment
,因为它是在API11中添加的。它只能通过getFragmentManager()
启动。
如果您真的想要支持较旧的API,最好坚持使用内部PreferenceActivity
的{{1}}。要继续使用该设计,您可以尝试Fragment
。
可以找到here和您可以通过Android Studio导入的示例(我认为)。它保留了Preference功能,但也实现了AppCompatPreferenceActivity
方法。