fragment 中adapter資料無法顯示問題
阿新 • • 發佈:2019-01-11
private synchronized void update() { if (currentApn != null && !listAll.contains(currentApn)) { listAll.add(0, currentApn); apnAdapter = new ApnAdapter(getActivity(), listAll, listener); apnAdapter.setSelectItem(0); } else { apnAdapter = new ApnAdapter(getActivity(), listAll, listener); } apn_list.setAdapter(apnAdapter); }
很簡單的一段程式碼,但是發現有的地方能顯示,有的地方不能顯示,很奇怪,查看了網上很多文章,沒有找到問題所在
通過列印定位,確定資料是不為空的,所以不是資料問題。
然後對比發現,能顯示和不能顯示的區別,終於發現了問題
update只是一個方法,能否顯示要看在哪呼叫的這個方法,不能顯示是因為在子執行緒呼叫了這個方法,所以修改很簡單,可以通過handler 訊息機制來實現,或者簡單處理如下
private synchronized void update() { if (currentApn != null && !listAll.contains(currentApn)) { listAll.add(0, currentApn); apnAdapter = new ApnAdapter(getActivity(), listAll, listener); apnAdapter.setSelectItem(0); } else { apnAdapter = new ApnAdapter(getActivity(), listAll, listener); } if (Looper.myLooper() != Looper.getMainLooper()){//非主執行緒 if (App.isBluetoothConnection) { activity2.runOnUiThread(new Runnable() { @Override public void run() { apn_list.setAdapter(apnAdapter); } }); } }else{ apn_list.setAdapter(apnAdapter); } }