因为我想在所有设置子菜单上设置AppCompat
操作栏,所以我必须实施一种解决方法,我的设置活动扩展AppCompatActivity
,而不是PreferenceActivity
。我在活动中使用PreferenceFragment
来处理首选项,每个PreferenceScreen
都有自己的xml文件,PreferenceFragment会为设置中的每个子菜单切换出来。所有这一切都是让Action Bar继续通过我的所有子菜单所必需的。
我试图从我的MainActivity中读取共享首选项文件中的字符串值,并且我尝试了三种不同的方法来获取这些信息,但没有一种方法有效:
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
String btSelectPref = sharedPref.getString(getString(R.string.bt_select_key), "");
,
SharedPreferences sharedPref = getSharedPreferences(name, MODE_PRIVATE);
String btSelectPref = sharedPref.getString(getString(R.string.bt_select_key), "");
和
SharedPreferences sharedPref = getPreferences(MODE_PRIVATE);
String btSelectPref = sharedPref.getString(getString(R.string.bt_select_key), "");
以下是我的偏好.xml的相关部分:
<PreferenceCategory
android:title="Bluetooth"
android:key="pref_bt">
<Preference
android:title="Select Bluetooth Device"
android:key="@string/bt_select_key"
android:defaultValue="0">
</Preference>
</PreferenceCategory>
这应该使用&#34; 0&#34;填充btSelectPref
字符串,但在测试时它总是为空。我已在我的MainActivity中的onCreate中包含PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
,因此应设置默认值。
我不确定我应该使用哪些方法,因为我的设置有多个资源文件,但它们似乎都不适用于我。在getSharedPreferences(name, MODE_PRIVATE)
的情况下,我不知道name参数应该引用什么,因为我从未命名过我的共享首选项文件。
编辑:事实证明我的问题与从共享首选项文件中获取值无关。我只是在我试图检查值的首选项上使用了错误的xml标记。我将其从通用<Preference>
标记更改为<ListPreference>
,我的代码开始使用PreferenceManager.getDefaultSharedPreferences()
。
答案 0 :(得分:1)
您想做什么以及您在做什么不同。如果您只想为密钥设置默认共享首选项,则请考虑此示例。如果您的整个活动只有一个共享的pref文件,那么您不需要指定任何名称。它会自动获得它。
public MainActivity extends AppCompatActivity {
SharedPreferences mPrefs;
int test;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_counter);
mPrefs = this.getPreferences(Context.MODE_PRIVATE);
test = mPrefs.getInt("pref_bt_select", 0);}
}
对于上面的示例,您可以在strings.xml中定义键和默认值,然后在查找所需的首选项时可以参考它。
答案 1 :(得分:0)
嘿我已经将AppCompat用于我的偏好屏幕。我这样做是因为我想使用Vintage Chroma,这是唯一的方法。但是我能够使用PreferenceManager.getDefaultSharedPreference()而没有任何错误。
此外,如果您想在片段中使用默认的共享偏好设置,您可以使用:
SharedPreferences preferences = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
这是我的完整代码:
public class PreferencesActivity扩展AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager()
.beginTransaction()
.replace(android.R.id.content, new PreferencesScreen())
.commit();
ActionBar toolbar = getSupportActionBar();
if (toolbar != null) {
toolbar.setDisplayHomeAsUpEnabled(true);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
}
return super.onOptionsItemSelected(item);
}
public static class PreferencesScreen extends PreferenceFragment {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings_xml);
}
}
}
以下是我的MAinActivity代码段
我设置默认文字主题的初始部分。
`public class MainActivity扩展了AppCompatActivity 实现NavigationView.OnNavigationItemSelectedListener {
AutoCompleteTextView mytextview;
public static String[] list;
ArrayList<String> recent = new ArrayList<String>();
public int recent_index = 0;
Menu mMenu;
@Override
protected void onCreate(Bundle savedInstanceState) {
/*Setting default theme.*/
SharedPreferences Sp= PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
int firstRun=Sp.getInt("firstRun",0);
if(firstRun==0)
{
SharedPreferences.Editor editor=Sp.edit();
editor.putInt("paragraphFontColor", Color.parseColor("#ffffff"));
editor.putInt("headingFontColor",Color.parseColor("#DE5246"));
editor.putInt("subheadingFontColor",Color.parseColor("#597d5e"));
editor.putInt("hyperlinksFontColor",Color.parseColor("#A5D8F5"));
editor.putInt("bodyColor",Color.parseColor("#2b2b2b"));
editor.putString("paragraphFont","PrintClearly.otf");
editor.putString("headingFont","PrintBold.otf");
editor.putString("subheadingFont","PrintBold.otf");
editor.putString("hyperlinkFont","PrintBold.otf");
editor.putString("paragraphFontStyle","normal");
editor.putString("headingFontStyle","normal");
editor.putString("subheadingFontStyle","normal");
editor.putString("hyperlinkFontStyle","normal");
editor.putString("actionBarColor","#597d5e");
editor.putString("paragraphFontSize","20px");
editor.putString("headingFontSize","30px");
editor.putString("subheadingFontSize","20px");
editor.putString("hyperlinkFontSize","20px");
editor.putString("firstRun",0);
editor.commit();
}
`