刚开始编程,我编写了我的第一个应用程序。我已经在这个问题上弄了很长时间了。我从教程中选择了这一点,其中在ListFragment中实现了一个监听器,并且事件监听器位于承载ListFragment的FragmentActivity中。下面是它是如何在这个例子中(只显示相关部分):在FragmentActivity中使用事件监听器在android应用程序类中实现监听器
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;
我从应用程序类中得到一个空指针异常。
非常感谢
为什么不能直接从AsyncTask通知活动,为什么你需要一个应用程序作为中介? – Egor
我的AsyncTask在应用程序类中。即使我这样做,我仍然需要实例化mCallback。这就是我的问题所在。 – fahmy
我认为你使用的应用程序类不当。将AsyncTask实现保持为独立类并将OnFetchCompleteListener的实现作为参数传递将会更合适。 – Egor