2016-03-21 17 views
0

Ağ görüşmesi yapıyorum, daha sonra ağ çağrısı yapıldığında bilgi alınırken notifyDataSetChanged öğesini aramak istiyorum. Bu, hepsi aynı iş parçacığında çalışıyor, ancak güncelleştirme başka bir iş parçacığında gerçekleşiyorsa listeyi güncelleştirmeye nasıl giderim?ArrayAdapter'te farklı bir iş parçacığı üzerinde bir geri arama içinde DataSetChanged nasıl bildirilir? - Android

**

Bu hata atmak olacaktır

:

android.view.ViewRootImpl$CalledFromWrongThreadException: 
Only the original thread that created a view hierarchy can touch its views. 
+0

'YAYIN Receiver' –

+1

kullanmak neyin notifyDataSetChanged' üzerinde' arayarak sorunu UI iş parçacığı? – pskink

+0

Kodunuz varsa daha iyi yardımcı olabilirim. 2 yolun var. önce broadcastReceiver kullanılır, ikincisi ağ yöntemlerinde kullanılır. –

cevap

1

Sen bir işleyici kullanmalıdır. Bağdaştırıcınızı, sınıfın bir niteliği gibi (herhangi bir yöntemin dışında) belirtin. Ve aktivitesinde bu kodu kullanın: (yöneticisini çağırmak için)

public Handler updateAdapter = new Handler(new Handler.Callback() { 
    @Override 
    public boolean handleMessage(Message msg) 
    { 
     //Update code 
    } 
}); 

Ve dizisindeki bu bir:

updateCode.sendEmptyMessage(0); 
+0

güzel, tam olarak aradığım şey bu. –

1

ayrı bir iş parçacığı üzerinde ağ işlemi gerçekleştirmek için AsyncTask kullanabilirsiniz. AsyncTask'ı UI iş parçacığından başlatırsınız ve görev kendisi ayrı bir iş parçacığında çalışır. AsyncTask bittiğinde, AsyncTask'in onPostExecute yöntemi, UE iş parçacığı üzerinde çalışarak notifyDataSetChanged() yöntemini çağırabilirsiniz.

Here's some useful info on AsyncTask in the Android developer docs

İlgili konular