所以我在一个名为onLoadFinish的方法中使用getdefaultsharedpreferences(它来自android的pdf库)。 这是代码:
public void onLoadFinish(DocumentState.OPEN state) {
//some irrelevant code here
SharedPreferences pref= PreferenceManager.getDefaultSharedPreferences(getActivity());
String text = pref.getString("example_list","");
int foo = Integer.parseInt(text);
goToPage(foo);
//some irrelevant code there
}
因此代码的主要任务是从我的example_list首选项(字符串)中获取一个值,将其转换为整数并将此整数放入我的goTopage();
,这会使应用程序跳转到某个页面在我的pdf文档中。
问题在于这一部分:
PreferenceManager.getDefaultSharedPreferences(getActivity())
getActivity不起作用。我也尝试过getApplicationContext()。应该在getDefaultSharedPreferences()括号中的内容?
答案 0 :(得分:0)
PreferenceManager应与PreferenceActivity一起使用。
只需使用context.getSharedPreferences("pref_name", Context.MODE_PRIVATE);
答案 1 :(得分:0)
getDefaultSharedPreferences 要求您的应用程序上下文为参数, 试试这个,
public class MyActivity extends ActionBarActivity
{
......
.......
PreferenceManager.getDefaultSharedPreferences(MyActivity.this);
......
......
}
答案 2 :(得分:0)
getDefaultSharedPreferences需要Context
类的实例。 getActivity类声明了Fragment方法,因此,除非在任何onLoadFinish
后继版中声明了Fragment
方法,否则无法使用它。根据您的意见,如果我理解正确,onLoadFinish
将在Activity内声明。如果是这样,您可以使用this
关键字来传递上下文,因为Activity
是Context
的后继者。如果此方法在另一个类中声明,则应通过构造函数注入将上下文传递给它,例如。
编辑通过构造函数注入提供上下文的示例。
假设您有以下界面:
public interface MyInterface {
void myAction();
}
你有一个实现它的类,需要一个Context
的实例来完成工作:
public class MyClass implements MyInterface {
private WeakReference<Context> mContext;
public MyClass(Context context) {
this.mContext = new WeakReference<Context>(context);
}
@Override
public void myAction() {
Context ctx = mContext.get();
if (ctx != null){
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx);
//do stuff
}
}
}
正如您所看到的,Context
实例是通过构造函数注入的,我们没有对上下文保持强引用(实际上它取决于特定需求)。可以通过以下方式在Activity
内使用此类:
MyClass myClass = new MyClass(this);
或者片段内部:
MyClass myClass = new MyClass(getActivity());