我发现了这篇文章(在首选项活动中使用什么代替“addPrecentcesFromResource”?),它帮助我理解你必须通过首选项片段
才能做到这一点。
在下面的解释中,我使用your. pack。
只是为了表明您必须输入包名。每个人都有自己的包,所以请将其替换为您的包。
让我们开始:
>
创建您的首选项片段类
我的偏好片段
public class MyPreferenceFragment extends PreferenceFragment
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.fragment_preference);
}
}
>
然后关联的xml资源
fragment_preference. xml(在项目的res/xml文件夹中)
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="FOO">
<CheckBoxPreference
android:key="checkBoxPref"
android:title="check it out"
android:summary="click this little box"/>
</PreferenceCategory>
</PreferenceScreen>
这就是Fragment
部分的全部内容。
>
创建首选项活动类
我的首选项活动
public class MyPreferenceActivity extends PreferenceActivity
{
@Override
public void onBuildHeaders(List<Header> target)
{
loadHeadersFromResource(R.xml.headers_preference, target);
}
@Override
protected boolean isValidFragment(String fragmentName)
{
return MyPreferenceFragment.class.getName().equals(fragmentName);
}
}
别忘了覆盖isValidFragment(String framentName)
方法,因为你会被你的应用程序打脸!;)更严重的是,我不知道你为什么需要这样做,但它是需要的。如果有人对此有解释,我很乐意阅读:)
多亏了kirtan403,我现在知道为什么需要它:它必须设置,因为(android框架片段注入)。
正如您在onBuildHeaders(列表
阅读本文(使用Fragments在Android中进行多窗格开发-教程)图像自行解释。
>
然后关联的xml资源
headers_preference. xml(在项目的res/xml文件夹中)
<?xml version="1.0" encoding="utf-8"?>
<preference-headers
xmlns:android="http://schemas.android.com/apk/res/android">
<header
android:fragment="your.package.MyPreferenceFragment"
android:title="Goto: Preference fragment"
android:summary="An example of some preferences." />
</preference-headers>
正如您可能在标题部分注意到的,您有:
android: fragment="你的。包。我的偏好片段"
这将充当您要显示的片段的链接。在平板电脑上,它将加载在右侧部分,在手机上,它将加载在当前视图的顶部。
现在您应该做的是将您的Activity添加到AndroidManifest. xml
文件中。
在application
部分中添加以下行:
<activity
android:name="your.package.MyPreferenceActivity"
android:label="Preferences">
</activity>
你大概会告诉我:
“哦,亲爱的,你忘了在你的行为中放入android: LaunchMode="singleTask"”
但是不要把这个放在手机上,因为你永远不会在手机上加载你的片段。这个错误是由一个伟大的人解决的!这是他博客的链接(小屏幕/手机上的Android标题首选项)。
最后,您需要添加显示此偏好的功能!!为此,您需要3件事:
>
菜单
menu. xml(在项目的文件夹res/菜单中)
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/preferences"
android:title="Preferences" />
</menu>
>
在onCreateOptionsMenu(菜单菜单)
方法下将此菜单加载到您的主活动(而不是首选项活动)中
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
>
单击该按钮时启动MyPrecentceActivity
Activity。
为此,您需要覆盖Main活动中的onOptionsItemS选择(MenuItem item)
方法。
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch(item.getItemId())
{
case R.id.preferences:
{
Intent intent = new Intent();
intent.setClassName(this, "your.package.MyPreferenceActivity");
startActivity(intent);
return true;
}
}
return super.onOptionsItemSelected(item);
}
朋友们来了!
我还没有测试过这段代码。我从自己的代码中获取并修改了它,所以我可能没有很好地复制粘贴的东西。如果你遇到错误告诉我,我会试着找出问题并解决这个问题。
我希望这篇文章能帮助一些人: D
干杯!
我喜欢这篇文章的解决方案:http://alvinalexander.com/android/android-tutorial-preferencescreen-preferenceactivity-preferencefragment
…因为对于那些只需要快速启动和运行一些非常基本的东西的人来说,它似乎是最紧凑的。它只有一个。java文件和两个小的xml文件。
活动配置提醒
将3个文件添加到您的项目后,不要忘记
A)将Prefs Activity添加到清单文件
B)添加一些启动Prefs Activity的方法…例如,按钮或菜单项
将以下文件添加到您的项目中。使用它们列出的顺序以避免编译错误。
>
添加 /res/values/array.xml
<resources>
<string-array name="listArray">
<item>Ace</item>
<item>Club</item>
</string-array>
<string-array name="listValues">
<item>Ace</item>
<item>Club</item>
</string-array>
</resources>
添加 /res/xml/preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference android:title="Your Name"
android:key="username"
android:summary="Please provide your username"></EditTextPreference>
<CheckBoxPreference android:title="Application Updates"
android:defaultValue="false"
android:summary="This option if selected will allow the application to check for latest versions."
android:key="applicationUpdates" />
<ListPreference android:title="Download Details"
android:summary="Select the kind of data that you would like to download"
android:key="downloadType"
android:defaultValue="Ace"
android:entries="@array/listArray"
android:entryValues="@array/listValues" />
</PreferenceScreen>
添加活动代码
public class AppPreferenceActivity extends PreferenceActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();
checkValues();
}
public static class MyPreferenceFragment extends PreferenceFragment
{
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
private void checkValues()
{
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String strUserName = sharedPrefs.getString("username", "NA");
boolean bAppUpdates = sharedPrefs.getBoolean("applicationUpdates",false);
String downloadType = sharedPrefs.getString("downloadType","1");
String msg = "Cur Values: ";
msg += "\n userName = " + strUserName;
msg += "\n bAppUpdates = " + bAppUpdates;
msg += "\n downloadType = " + downloadType;
Toaster.shortDebug(msg);
}
}