所以我的应用程序中有一个pdf插件,它使用公共类SimpleDocumentReader。这只是一个阶级,而不是一个活动。我有一个方法,您可以在完成加载后更改文档的页面:
@Override
public void onLoadFinish(DocumentState.OPEN state) {
if (state == OPEN.SUCCESS) {
SharedPreferences pref= PreferenceManager.getDefaultSharedPreferences();
String page = pref.getString("example_list","");
goToPage(Integer.parseInt(page));
}
}
如您所见,我想访问defaultsharedpreferences,其中存储了一个字符串,我可以使用该字符串更改页面。问题是,在getDeaultSharedPreferences()的括号中;我需要上下文。我已经尝试了几件事:
getApplicationContext()(不起作用),
getActivity()也非常愚蠢。
还尝试使方法接收如下的上下文:
public void onLoadFinish(DocumentState.OPEN state, Context context) {
// line for getting sharedpreferences Context:
SharedPreferences pref= PreferenceManager.getDefaultSharedPreferences(context);
}
但它会引发一些错误: 首先,@ Override无效,因为
方法不会覆盖超类
中的方法
第二个错误位于顶部,类本身:
public class SimpleDocumentReader implements ReaderListener {}
引发此错误:
类“SimpleDocumentReader”必须声明为abstract或在ReaderListener中实现抽象方法'onLoadFinish(OPEN)'。
这是什么意思?
编辑:以下是SimpleDocumentReader类的启动方式:
首先,在我的Activity中使用SimpleReaderFactory创建一个SimpleViewer:
SimpleDocumentReader v = SimpleReaderFactory.createSimpleViewer(this, null);
v.openUrl("myurl", "mypassword");
其次,SimpleReaderFactory:
public class SimpleReaderFactory {
/**
* Creates and returns a PDF viewer used for viewing, reading, and
* navigating PDF document
*
* @param act
* The activity of the current application.
* @param listener
* The SimpleDocumentViewerListener instance.
*
* @return SimpleDocumentViewer The default PDF document viewer instance
*/
public static SimpleDocumentReader createSimpleViewer(Activity act,
SimpleDocumentReaderListener listener) {
SimpleDocumentReader viewer = new SimpleDocumentReader(act);
viewer.setListener(listener);
return viewer;
}
}
最后,我的SimpleDocumentReader:
public class SimpleDocumentReader implements ReaderListener {
// a lot of stuff here, I will post the important snippets of code:
public void onLoadFinish(DocumentState.OPEN state) {
if (state == OPEN.SUCCESS) {
mControlView.init(mAct);
RelativeLayout layout = new RelativeLayout(mAct);
layout.addView(mReaderView);
layout.addView(mControlView);
mAct.setContentView(layout);
CoordConverter.initCoordConverter(mAct, mReaderView);
SharedPreferences pref=
//my attempts at getting the defaultsharedpreferences
PreferenceManager.getDefaultSharedPreferences();
String hour = pref.getString("example_list","");
goToPage(Integer.parseInt(hour));
}
}
答案 0 :(得分:1)
这是什么意思?
正如它所说的那样。 ReaderListener
要求您显示带有签名onLoadFinish()
的{{1}}。
关于您的整体问题,请将public void onLoadFinish(DocumentState.OPEN state)
传递给SharedPreferences
的构造函数,该构造函数在数据成员中保留,并在SimpleDocumentReader
中使用它。