剛開始編程,我編寫了我的第一個應用程序。我已經在這個問題上弄了很長時間了。我從教程中選擇了這一點,其中在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