刚刚开始编程,我正在编写我的第一个应用程序。我为这事绞尽脑汁已经够久了。我从教程中学到了这一点,在教程中,侦听器在ListFragment中实现,而事件侦听器在托管ListFragment的FragmentActivity中。下面是示例中的示例(仅显示相关部分):
MyList类:
public class MyList extends ListFragment{
OnSomeItemSelectedListener mCallback;
public interface OnSomeItemSelectedListener {
public void onSomeItemSelectedListener(int position, long id);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception.
try {
mCallback = (OnSomeItemSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnSomeItemSelectedListener");
}
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
mCallback.onSomeItemSelectedListener(position, id);
}
}MainActivity类:
public class MainActivity extends FragmentActivity implements
MyList.OnSomeItemSelectedListener{
@Override
public void onSomeItemSelectedListener(int position, long id) {
//some stuff done here when clicked on a item from the listfragment
}
}上面的工作是完美的。
我正在尝试在一个应用程序类中实现这一点,以便在AsyncTask完成时通知事件侦听器(一个FragmentActivity)。这是我在应用程序类中所做的:
MyApplication类:
public class MyApplication extends Application {
OnFetchCompleteListener mCallback;
public interface OnFetchCompleteListener {
public void onFetchCompleteListener();
}
public synchronized void fetchUpdates() {
String[] mURLs = getURLs();
new DownloadDataAsyncTask().execute(mURLs[0], mURLs[1]);
}
private class DownloadDataAsyncTask extends
AsyncTask<String, Void, JSONObject[]> {
@Override
protected JSONObject[] doInBackground(String... params) {
//Some stuff
return mJSON;
}
@Override
protected void onPostExecute(JSONObject[] result) {
// Informing listeners on fetchData complete
mCallback.onFetchCompleteListener();
}
}
}如何在应用程序类中实例化mCallback?如果没有这个,
mCallback = (OnSomeItemSelectedListener) activity;我从应用程序类得到一个空指针异常。
非常感谢
发布于 2013-03-29 19:43:23
我认为您可以从Activity而不是从应用程序实例化mCallback。
在活动的onCreate()或onResume()方法中,您可以编写:
MyApplication myApplication = getApplication();
myApplicaton.mCallback = this;但是要确保您的活动实现了OnFetchCompleteListener (我不知道您为什么要在最后一段代码中键入OnSomeItemSelectedListener )。
https://stackoverflow.com/questions/15702308
复制相似问题