[英]Using GetDefaultSharedPreferences - SharedPref values reset between Activities
[英]Using getDefaultSharedPreferences in a method
因此,我在名为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()的括号应该是什么?
PreferenceManager应该与PreferenceActivity一起使用。
只需使用context.getSharedPreferences("pref_name", Context.MODE_PRIVATE);
getDefaultSharedPreferences需要您的应用程序上下文一个参数,试试这个,
public class MyActivity extends ActionBarActivity
{
......
.......
PreferenceManager.getDefaultSharedPreferences(MyActivity.this);
......
......
}
getDefaultSharedPreferences需要Context
类的实例。 getActivity方法是在Fragment类中声明的,因此,除非您的onLoadFinish
方法在任何Fragment
后续类中声明,否则您将无法使用它。 根据您的评论,如果我对您的理解正确,则在Activity内声明onLoadFinish
。 如果是这样,您可以仅使用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());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.