我在使用XML加载PreferenceFragment时遇到了一些困难。 它不断抛出 ClassCastException “PreferenceFragmentClass无法强制转换为android.support.v4.app.Fragment”。 该代码旨在在API14及更高版本上运行。
这是我的代码:
import android.os.Bundle;
import android.preference.PreferenceFragment;
public class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
}
}
以下是使用SettingsFragment的代码:
import android.app.ActionBar;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
public class FragmentsSetup extends FragmentActivity {
private ViewPager viewPager;
private TabsAdapter tabsAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
viewPager = new ViewPager(this);
viewPager.setId(R.id.pager);
setContentView(viewPager);
final ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
tabsAdapter = new TabsAdapter(this, viewPager);
tabsAdapter.addTab(actionBar.newTab().setText(getString(R.string.forwarding_tab).toUpperCase()), ForwardingFragment.class, null);
tabsAdapter.addTab(actionBar.newTab().setText(getString(R.string.settings_tab).toUpperCase()), SettingsFragment.class, null);
}
}
任何提示都将不胜感激。
答案 0 :(得分:2)
SettingsFragment
继承自PreferenceFragment
。 PreferenceFragment
来自片段的本机API Level 11实现。但是,FragmentsSetup
继承自{1}},来自Android支持包的片段后端。
这种组合不起作用。
如果您打算支持早于API级别11的设备,则无法使用FragmentActivity
。此外,我不确定PreferenceFragment
是否在PreferenceFragment
之外工作(可能,但我从未尝试过)。
答案 1 :(得分:0)
如果您正在为Android 3.0(API级别11)及更高版本开发,则应使用PreferenceFragment显示您的Preference对象列表。 您还可以为任何活动添加PreferenceFragment - 您不需要使用PreferenceActivity。
请参阅此处的文档: https://developer.android.com/guide/topics/ui/settings.html?