我正在为我的班级伙伴开发小型应用程序,这是可调整的时间表。它使用Fragments将每周的每一天显示为一个漂亮的,可手指浏览的UI:
在SettingsActivity.class中有一些首选项(在xml中定义),它自动将设置存储在SharedPreferences中。问题是定义了Fragment的类是静态的。我不能使用那里的非静态方法引用,如:
SharedPreferences settings = getSharedPreferences(APP_PREFERENCES, MODE_PRIVATE);
通过阅读developer.android.com上的文档并使用Google搜索帮助,我发现要使用SettingsActivity.class创建的SharedPreferences,我必须使用PreferenceManager,如下所示:
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
现在它没有向我显示有关非静态引用的错误,但我不知道如何在getDefaultSharedPreferences参数中引用SettingsActivity.class,因为我在Fragment静态类中,所以我不能使用“this”
我还尝试在静态类之外创建SharedPreference对象。但是,该对象的所有用法都抱怨“无法从静态上下文中引用非静态字段”。
在我这里使用SharedPreferences非常重要,因为稍后我将根据一小时实现课程(TextViews)颜色变化,并且在设置中也可以切换。
以下是该片段类的代码:
public static class Dzien extends Fragment {
public static final String ARG_SECTION_NUMBER = "section_number";
public Dzien() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
TextView lekcja1 = (TextView) rootView.findViewById(R.id.lekcja1);
TextView lekcja2 = (TextView) rootView.findViewById(R.id.lekcja2);
TextView lekcja3 = (TextView) rootView.findViewById(R.id.lekcja3);
TextView lekcja4 = (TextView) rootView.findViewById(R.id.lekcja4);
TextView lekcja5 = (TextView) rootView.findViewById(R.id.lekcja5);
TextView lekcja6 = (TextView) rootView.findViewById(R.id.lekcja6);
TextView lekcja7 = (TextView) rootView.findViewById(R.id.lekcja7);
TextView lekcja8 = (TextView) rootView.findViewById(R.id.lekcja8);
TextView lekcja9 = (TextView) rootView.findViewById(R.id.lekcja9);
//Here is where I try to create SharedPreference object
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
switch (getArguments().getInt(ARG_SECTION_NUMBER)) {
case 1: { // Poniedziałek
lekcja1.setText(getString(R.string.wos));
lekcja2.setText(getString(R.string.mat));
lekcja3.setText(getString(R.string.ang));
lekcja4.setText(getString(R.string.gw));
lekcja5.setText(getString(R.string.his));
lekcja6.setText(getString(R.string.wf));
lekcja7.setText(getString(R.string.pp));
if (settings.getInt(GRUPA_INFORMATYKA, 1) == 1) {
lekcja8.setText(getString(R.string.inf));
} else {
lekcja8.setText(getString(R.string.brak));
}
lekcja9.setText(getString(R.string.brak));
break;
}
case 2: { // Wtorek
lekcja1.setText(getString(R.string.mat));
lekcja2.setText(getString(R.string.pp));
lekcja3.setText(getString(R.string.rel));
lekcja4.setText(getString(R.string.wf));
lekcja5.setText(getString(R.string.pol));
lekcja6.setText(getString(R.string.pol));
if (settings.getInt(GRUPA_JEZYKOWA, 1) == 2) {
lekcja7.setText(getString(R.string.ros));
lekcja8.setText(getString(R.string.ros));
} else {
lekcja7.setText(getString(R.string.brak));
lekcja8.setText(getString(R.string.brak));
}
lekcja9.setText(getString(R.string.brak));
break;
}
case 3: { // Sroda
lekcja1.setText(getString(R.string.his));
lekcja2.setText(getString(R.string.wf));
lekcja3.setText(getString(R.string.mat));
lekcja4.setText(getString(R.string.rel));
lekcja5.setText(getString(R.string.ang));
if (settings.getInt(GRUPA_JEZYKOWA, 1) == 1) {
lekcja6.setText(getString(R.string.niem));
lekcja7.setText(getString(R.string.niem));
} else {
lekcja6.setText(getString(R.string.brak));
lekcja7.setText(getString(R.string.brak));
}
lekcja8.setText(getString(R.string.brak));
lekcja9.setText(getString(R.string.brak));
break;
}
case 4: { // Czwartek
lekcja1.setText(getString(R.string.mat));
lekcja2.setText(getString(R.string.fiz));
lekcja3.setText(getString(R.string.wok));
lekcja4.setText(getString(R.string.geo));
lekcja5.setText(getString(R.string.ang));
lekcja6.setText(getString(R.string.chem));
if (settings.getInt(GRUPA_INFORMATYKA, 1) == 2) {
lekcja7.setText(getString(R.string.inf));
} else if (((settings.getInt(GRUPA_INFORMATYKA, 1) == 2)) && ((settings.getInt(GRUPA_JEZYKOWA, 1) != 3))) {
lekcja7.setText(getString(R.string.brakpre));
} else {
lekcja7.setText(getString(R.string.brak));
}
if (settings.getInt(GRUPA_JEZYKOWA, 1) == 3) {
lekcja8.setText(getString(R.string.por));
lekcja9.setText(getString(R.string.por));
}
break;
}
case 5: { // Piątek
lekcja1.setText(getString(R.string.mat));
lekcja2.setText(getString(R.string.mat));
lekcja3.setText(getString(R.string.bio));
lekcja4.setText(getString(R.string.pol));
lekcja5.setText(getString(R.string.pol));
lekcja6.setText(getString(R.string.edb));
if (settings.getBoolean(WDZ, false)) {
lekcja7.setText(getString(R.string.wdz));
} else {
lekcja7.setText(getString(R.string.brak));
}
lekcja8.setText(getString(R.string.brak));
lekcja9.setText(getString(R.string.brak));
break;
}
}
return rootView;
}
}
P.S。我正在使用Android Studio IDE。
答案 0 :(得分:0)
只需改为:
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity());
答案 1 :(得分:0)
PreferenceManager.getDefaultSharedPreferences(this);
要通过此方法获取SharedPreferences
,您必须传递Context
个对象。因此,在这种情况下,您可以通过Activity
,因为Fragment
有获取父Activity
的方法,而Activity
是来自Context
的扩展类。代码如下所示:
PreferenceManager.getDefaultSharedPreferences(getActivity());
祝你好运!
答案 2 :(得分:0)
我被挂了几天试图获取我的应用程序存储的共享密钥。我找到了关于查看存储在模拟器上的存储的xml sharepref的技术说明。
http://mrbool.com/how-to-implement-shared-preferences-in-android/28370
这给了我关于我做错了什么的答案。 SharePref的默认文件名似乎是MainActivity.xml。所以下面的代码工作。引用
private static String filename =“MainActivity”; pref = getSharedPreferences(filename,0); //新的8/27/14测试