[英]get ListView in BroadcastReceiver error receiving broadcast intent
我正在寫一個可下載的listview項目,並且使用了下載管理器。 為了在每次下載完成后更新listview,我需要更新行,所以我使用了BroadcastReceiver,我的代碼對於listfragment頁面來說很好,但對於listactivity頁面卻不起作用。 貝婁是我的代碼有錯誤:
BroadcastReceiver alldownloadReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//check if the broadcast message is for our Enqueued download
long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
//final int position = intent.getIntExtra("position", -1);
//Log.d("rrr", "dd");
final AllproAdapter adapter = (AllproAdapter) getListView().getAdapter();
//((AllproAdapter)((HeaderViewListAdapter)lv.getAdapter()).getWrappedAdapter()).notifyDataSetChanged();
//adapter.setDownloadFinished(referenceId);
// Ask the adapter to refresh the ListView
//adapter.notifyDataSetChanged();
}
};//end of broadcast reciever
錯誤在此行f代碼中:
final AllproAdapter adapter = (AllproAdapter) getListView().getAdapter();
這是logcat:
08-08 14:21:01.997: E/AndroidRuntime(5286): FATAL EXCEPTION: main
08-08 14:21:01.997: E/AndroidRuntime(5286): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.DOWNLOAD_COMPLETE flg=0x10000010 pkg=com.example.one (has extras) } in com.example.one.AllProductsActivity$1@40f2ae88
08-08 14:21:01.997: E/AndroidRuntime(5286): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:768)
08-08 14:21:01.997: E/AndroidRuntime(5286): at android.os.Handler.handleCallback(Handler.java:725)
08-08 14:21:01.997: E/AndroidRuntime(5286): at android.os.Handler.dispatchMessage(Handler.java:92)
08-08 14:21:01.997: E/AndroidRuntime(5286): at android.os.Looper.loop(Looper.java:137)
08-08 14:21:01.997: E/AndroidRuntime(5286): at android.app.ActivityThread.main(ActivityThread.java:5041)
08-08 14:21:01.997: E/AndroidRuntime(5286): at java.lang.reflect.Method.invokeNative(Native Method)
08-08 14:21:01.997: E/AndroidRuntime(5286): at java.lang.reflect.Method.invoke(Method.java:511)
08-08 14:21:01.997: E/AndroidRuntime(5286): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
08-08 14:21:01.997: E/AndroidRuntime(5286): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
08-08 14:21:01.997: E/AndroidRuntime(5286): at dalvik.system.NativeStart.main(Native Method)
08-08 14:21:01.997: E/AndroidRuntime(5286): Caused by: java.lang.ClassCastException: android.widget.HeaderViewListAdapter cannot be cast to com.example.one.AllproAdapter
08-08 14:21:01.997: E/AndroidRuntime(5286): at com.example.one.AllProductsActivity$1.onReceive(AllProductsActivity.java:224)
08-08 14:21:01.997: E/AndroidRuntime(5286): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:758)
08-08 14:21:01.997: E/AndroidRuntime(5286): ... 9 more
您已經向ListView添加了頁眉視圖和/或頁腳視圖。 在內部,ListView將使用另一個適配器包裝它給定的適配器,以便它可以提供頁眉/頁腳視圖。 當y9ou調用getAdapter()
,它將返回此包裝器,您不能將該包裝器轉換為自定義類型(AllproAdapter)。
您可以在“活動/片段”中保留對您自己的適配器的引用,然后直接使用它。
// class member
private AllproAdapter adapter;
...
// initialization
adapter = ...
setListAdapter(adapter);
...
// inside broadcast receiver
long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
adapter.setDownloadFinished(referenceId);
adapter.notifyDataSetChanged();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.