StackView'e dayanan ve bazı öğeleri görüntülemen uygulamam için uygulamam üzerinde çalışıyorum. Öğelerin sayısı kullanıcı eylemleri nedeniyle değişebilir - bunun bir çeşit favori menü olduğunu söyleyelim. Ben StackView için görüşlerini oluşturmak için RemoteViewsFactory torunuyum uygulamış:RemoteViewsFactory, boş veri kümesi olduğunda getViewAt olarak adlandırıldı
public class StackRemoteViewsFactory implements RemoteViewsFactory {
private List<Item> data;
private Context context;
public StackRemoteViewsFactory(Context context) {
this.context = context;
data = new DAO(context).getFavouriteCards();
}
@Override
public void onDataSetChanged() {
data = new DAO(context).getWidgetItems(); // refresh widget dataset
}
@Override
public int getCount() {
return data.size();
}
@Override
public RemoteViews getViewAt(int position) {
Item item = data.get(position);
// this is my problem and will be explained below -
// here I'm getting IndexOutOfBoundsException, position = 0
...
}
// I have omitted other methods to avoid verbosity
}
Tüm birinci Widget başında iyi çalışır - Widget başarıyla boş görünümü görüntüler ve her şey iyi gidiyor.
AppWidgetManager widgetManager = AppWidgetManager.getInstance(getActivity());
ComponentName component = new ComponentName(getActivity(), MyWidgetProvider.class);
int[] widgetIds = widgetManager.getAppWidgetIds(component);
widgetManager.notifyAppWidgetViewDataChanged(widgetIds, R.id.widgets_stack);
Tüm bu noktada iyi olduğunu - veri kümesi başarıyla değiştirildi ve ben widget'ındaki benim favori ifade göreceksiniz: Ben sık kullanılanlara bazı yeni eleman katma sonra ben hemen AppWidgetManager bildirin. Ama favorilerden benim tek öğe kaldırmak ve sık (AppWidgetManager elbette bildirilir) Benim getViewAtMethod içinde IndexOutOfBoundsException almak boş olunca: Ne onDataSetChanged()
yangınlardan sonra getCount()
döner ben kontrol ettik hepsinden
10-15 17:26:36.810: E/AndroidRuntime(30964): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
Birinci 0 - oldu Bu yüzden'un numaralı telefonu neden getCount()
döndürdüğünü anlamıyorum. Anladığım kadarıyla, RemoteViewFactory
normal bir bağdaştırıcı gibidir, bu nedenle bu davranış tamamen kafa karıştırıcıdır. Belki bu konuda benim önerim yanlış ve yanlış bir şey yapıyorum?
GÜNCELLEME
Bugün bazı GUI hata düzeltmek isterken ListView
yerine StackView
kullanmak benim Widget düzenini değiştirdik. Ve şimdi her şey iyi çalışıyor. Daha fazla deney, AdapterViewFlipper
'un StackView ile aynı sorunu gösterdiğini gösterir. Anladığım kadarıyla, AdapterViewAnimator
soyundan gelen bazı yönler var - herkes benim varsayımı onaylayabilir mi/reddedebilir mi?
düzgün bir görünüm dönmek emin olun, ama üzerinde çalıştırmak için ne: Bazı Devs Şimdilik ... o "kesmek"
arayacak aynı sorun. Veri kümesi güncelleştirildi, ancak bir şekilde RemoteViewsFactory eski bir "getCount" değeri kullanıyor. Başka bir şey buldun mu? – mdelolmo
@mdelolmo Maalesef bu sorun için çözüm bulamadım ve widget'ımı tek bir öğeyi görüntülemek için yeniden çalıştırdım ve < and > düğmelerini kullanarak öğeler arasında gezinin. – Viacheslav
Aşağıdaki cevap benim için bu sorunu çözdü. Bu bir geçici çözüm, ama güzel bir :) –