私はStackViewに基づいたアプリケーション用のウィジェットで作業していて、いくつかの項目を表示する必要があります。アイテムの数は、ユーザーの操作によって異なる場合があります。これは何らかのお気に入りメニューです。私はStackViewのためのビューを生成するためにRemoteViewsFactory子孫を実装している:空のデータセットのときにRemoteViewsFactoryがgetViewAtを呼び出しました
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
}
すべては最初のウィジェットの起動時にうまく機能 - ウィジェットが正常に空のビューが表示され、すべてがうまくいけ。
AppWidgetManager widgetManager = AppWidgetManager.getInstance(getActivity());
ComponentName component = new ComponentName(getActivity(), MyWidgetProvider.class);
int[] widgetIds = widgetManager.getAppWidgetIds(component);
widgetManager.notifyAppWidgetViewDataChanged(widgetIds, R.id.widgets_stack);
すべてが、この時点でもある - データセットが正常に変更し、私は、ウィジェット上で私のお気に入りの項目を参照してください。私はお気に入りにいくつかの新しい要素を追加した後、私はすぐにAppWidgetManagerに通知します。しかし、私はお気に入りから私の単一の要素を削除して、お気に入り(AppWidgetManagerはもちろんの通知)私は私のgetViewAtMethodにはIndexOutOfBoundsExceptionを受ける空になったとき:何onDataSetChanged()
火災後getCount()
戻り、私がチェックしたすべての
10-15 17:26:36.810: E/AndroidRuntime(30964): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
まず - それは0でしたなぜRemoteViewsFactory
がgetCount()
に0を返すのかをRemoteViewsFactory
と呼ぶ理由は分かりません。私が理解する限り、RemoteViewFactory
は通常のアダプタのようなものです。この動作は完全に混乱しています。だから私の提案は間違っていると私は何か間違っている?
UPDATE
今日、私はいくつかのGUIのバグを修正しようとしているときにListView
の代わりStackView
を使用するように私のウィジェットのレイアウトを変更しました。そして、今はすべてうまくいく。さらなる実験では、AdapterViewFlipper
にStackViewと同じ問題があることが示されています。私が理解する限り、いくつかの側面が子孫と働いていますAdapterViewAnimator
- 誰も私の前提を確認/否定できますか?
上で適切にビューを返すことを確認したが、私は上で実行するために起こる:一部の開発者は今のところ...それは「ハック」
を呼び出します同じ問題。データセットは更新されますが、RemoteViewsFactoryは古い値の「getCount」を使用しています。あなたは他の何かを見つけましたか? – mdelolmo
@mdelolmo残念ながら、私はこの問題の解決策を見つけられず、< and >ボタンを使用してアイテムを1つだけ表示してナビゲートするウィジェットを修正しました。 – Viacheslav
下記の答えは私のためにこの問題を解決しました。これは回避策ですが、素敵なものです。 –