未显示PreferenceActivity(空白屏幕)

时间:2015-01-30 00:12:22

标签: android android-preferences preferenceactivity preferencescreen

我正在关注这些instructions以创建 PreferenceActivity ,但不会显示PereferenceActivity。活动开始但布局为空白

  1. 我也通过引用developer.android.com在我的应用程序中使用材料设计NavDrawer,但我希望它不会影响
  2. 我在运行Kitkat的设备上测试应用程序
  3. 以下是我启动PreferenceActivity "screenshot"
  4. 时会发生的情况
  5. logcat的: Could not find method android.preference.PreferenceActivity.onCreate VFY: unable to resolve virtual method 950: Landroid/preference/PreferenceActivity;.onCreate(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V
  6. 代码:

    app_preference.xml

    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="Settings">
        <ListPreference
                android:title="Timer"
                android:summary="@string/timer_summary"
                android:key="prefTime"
                android:defaultValue="30"
                android:entries="@array/prefTime"
                android:entryValues="@array/prefTimeValue"/>
        <SwitchPreference
                android:title="Shuffle"
                android:summary="@string/shuffle_summary"
                android:defaultValue="false"
                android:key="prefToggleShuffle"/>
        <SwitchPreference
                android:title="Allow over Wifi-only"
                android:summary="@string/wifi_only_summary"
                android:defaultValue="false"
                android:key="prefWifiOnly"/>
        <Preference
                android:title="Restore Defaults"
                android:summary="@string/restore_summ"/>
        <Preference
                android:title="Clear Data"
                android:summary="@string/shuffle_summary"/>
    </PreferenceCategory>
    

    Settings.java

    public class Settings extends PreferenceActivity {
    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
        getActionBar().setDisplayHomeAsUpEnabled(true);
        getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
    }
    
    public static class SettingsFragment extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.app_preference);
        }
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                NavUtils.navigateUpFromSameTask(this);
                break;
        }
        return super.onOptionsItemSelected(item);
    }
    

    }

    Mainfest.xml

    .....
    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21"/>
    <activity android:name=".preferences.Settings>
            <intent-filter>
                <category android:name="android.intent.category.PREFERENCE"/>
            </intent-filter>
            <meta-data android:name="android.support.PARENT_ACTIVITY"
                       android:value=".activity.MainActivity"/>
        </activity>
    .....
    

    调用意图

    case R.id.action_setting:
                Intent intent = new Intent(this, Settings.class);
                startActivityForResult(intent, RESULT_SETTINGS);//RESULT_SETTINGS = 1
                break;
    

4 个答案:

答案 0 :(得分:8)

删除onCreate方法中的第二个参数:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Aviel Fedida的更新: 根据{{​​3}},在重新初始化活动时调用void onCreate (Bundle savedInstanceState, PersistableBundle persistentState)。 因此,当您使用startActivityForResultstartActivity启动新活动时,未调用该方法,并且不会执行内部代码。

出现黑屏,因为addPreferencesFromResource(R.xml.app_preference);是&#34;无法访问的代码&#34;

答案 1 :(得分:2)

使用protected void onCreate(Bundle savedInstanceState)代替public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState)

答案 2 :(得分:1)

我有同样的问题,我通过添加以下行解决了这个问题:

setContentView(R.layout.activity_settings);

这里我的意思是添加与SettingsActivity相关联的布局文件, 在OnCreate类的Settings方法内:

enter image description here

答案 3 :(得分:0)

[重新编辑]

主要问题似乎是您使用的是PreferenceActivity PreferenceFragment,而您假设PreferenceActivity包含可以直接访问的操作栏之类的内容。这可能是一个不好的假设。

PreferenceFragment实际上是指&#34;常规&#34; Activity,而不是PreferenceActivity

因此,例如,如果您真的想要访问操作栏,则应使用ActionBarActivity代替。另请参阅documentation in the API Guide