PreferenceActivity 未显示(黑屏)
PreferenceActivity not displayed (Blank Screen)
我正在按照这些 instructions 创建一个 PreferenceActivity 但是没有显示 PereferenceActivity。 Activity 已启动,但 布局为空白。
- 我也在参考developer.android.com在我的应用程序中使用material设计NavDrawer,但我希望它不会影响
- 我正在设备上测试应用程序 运行 Kitkat
- 这是我启动首选项时发生的情况Activity "screenshot"
- 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
代码:
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;
[重新编辑]
主要问题似乎是您将 PreferenceActivity
与 PreferenceFragment
一起使用,并且您假设 PreferenceActivity
具有您可以直接访问的操作栏之类的东西.这可能是一个错误的假设。
A PreferenceFragment
实际上是要与 "regular" Activity
一起使用,而不是 PreferenceActivity
.
因此,例如,如果您真的想访问操作栏,则应该使用 ActionBarActivity instead. See also the documentation in the API Guide。
删除onCreate方法中的第二个参数:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Aviel Fedida 更新:
根据 this,void onCreate (Bundle savedInstanceState,
PersistableBundle persistentState)
在 activity 被重新初始化时被调用。
因此,当您使用 startActivityForResult
或 startActivity
启动新的 Activity 时,不会调用该方法,并且不会执行其中的代码。
出现黑屏是因为addPreferencesFromResource(R.xml.app_preference);
是"unreachable code"
使用protected void onCreate(Bundle savedInstanceState)
代替public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState)
我遇到了同样的问题,我通过添加以下行解决了这个问题:
setContentView(R.layout.activity_settings);
这里我的意思是添加与您的 SettingsActivity
关联的布局文件,
在 Settings
class 的 OnCreate
方法中:
我正在按照这些 instructions 创建一个 PreferenceActivity 但是没有显示 PereferenceActivity。 Activity 已启动,但 布局为空白。
- 我也在参考developer.android.com在我的应用程序中使用material设计NavDrawer,但我希望它不会影响
- 我正在设备上测试应用程序 运行 Kitkat
- 这是我启动首选项时发生的情况Activity "screenshot"
- 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
代码:
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;
[重新编辑]
主要问题似乎是您将 PreferenceActivity
与 PreferenceFragment
一起使用,并且您假设 PreferenceActivity
具有您可以直接访问的操作栏之类的东西.这可能是一个错误的假设。
A PreferenceFragment
实际上是要与 "regular" Activity
一起使用,而不是 PreferenceActivity
.
因此,例如,如果您真的想访问操作栏,则应该使用 ActionBarActivity instead. See also the documentation in the API Guide。
删除onCreate方法中的第二个参数:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Aviel Fedida 更新:
根据 this,void onCreate (Bundle savedInstanceState,
PersistableBundle persistentState)
在 activity 被重新初始化时被调用。
因此,当您使用 startActivityForResult
或 startActivity
启动新的 Activity 时,不会调用该方法,并且不会执行其中的代码。
出现黑屏是因为addPreferencesFromResource(R.xml.app_preference);
是"unreachable code"
使用protected void onCreate(Bundle savedInstanceState)
代替public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState)
我遇到了同样的问题,我通过添加以下行解决了这个问题:
setContentView(R.layout.activity_settings);
这里我的意思是添加与您的 SettingsActivity
关联的布局文件,
在 Settings
class 的 OnCreate
方法中: