更新:同じ問題が発生した場合は、問題が発生しました。 GridViewウィジェットの重複するアイテム
私はそれにgridviewを持つappwidgetを持っています。
ウィジェットにアイテムを追加すると、ほとんどの場合、最初のアイテムが2回表示されます(最初のアイテムと2番目のアイテムを表示する代わりに)。
ウィジェットのアップデートインテントを実行すると、問題は修正され、決して返されません(すでに私のグリッドビューに2つのアイテムがあると仮定して)。
ただし、最初の2つの項目が追加されると、常に発生します。
何ができますか?
更新日:私は、新しいアイテムがGridViewに追加されたときにいつもそれが起こることに気付きました。新しいアイテムを追加せずにウィジェットを更新すると、正常に動作します。
私が見たもう一つのことは、getViewAtメソッドは常に最初の項目(位置0)に対して2回呼び出されることです。多分それは関連しているでしょうか?
私はかなり密接にここにサンプルを追っ: http://developer.android.com/resources/samples/WeatherListWidget/src/com/example/android/weatherlistwidget/WeatherWidgetService.html
をここでは私のRemoteViewsServiceですが、私はこれが関連する部分だと思うが、私は実際にはわかりません。 他に何が影響を与えることができますか?
package com.manor.TestApp;
パブリッククラスTestAppRemoteViewsServiceはRemoteViewsService {
@Override
公共RemoteViewsFactory onGetViewFactory(テントの意図){
リターン新しいTestAppViewsFactory(this.getApplicationContext()、インテント)に延びています。 }}
クラスTestAppViewsFactoryはRemoteViewsServiceを実装します。RemoteViewsFactory {
プライベートコンテキストmContext;
// private int mAppWidgetId;
private TestDb mDb = null;
private int mCount = 0;
プライベートString [] mData;
public TestAppViewsFactory(コンテキストコンテキスト、意図インテント){ mContext = context;
/*mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);*/
}
@Override公共ボイドのonCreate(){
mDb = new TestDb(mContext); mDb.open(false);
}
@Override公共ボイドonDestroy(){
if (mDb != null) mDb.close();
}
@Override公共INT同様にgetCount(){
Log.d("TestApp", "getCount: " + Integer.toString(mCount)); return mCount;
}
@Override公共RemoteViews getViewAt(INT位置){
Log.d("TestApp", "pos: " + Integer.toString(position)); if (position >= mData.length) return null; Log.d("TestApp", "p: " + mData[position]); /*if (position > 0) { Log.d("TestApp", "here"); }*/ SharedPreferences sharedPreferences = >mContext.getSharedPreferences(TestAppPreferenceActivity.SHARED_PREFS_NAME, 0); RemoteViews rv = new RemoteViews(mContext.getPackageName(), >R.layout.widget_item); // --- set text and image to remoteviews --- return rv;
}
@Override public RemoteViews getLoadingView(){ 戻り値はnullです。 }
@Override onDataSetChanged公共ボイド(){ SharedPreferencesのsharedPreferences =
mContext.getSharedPreferences(TestAppPreferenceActivity。SHARED_PREFS_NAME、0);
String[] strs = mDb.getData(); if (strs == null) { mCount = 0; return; } // -- fills mData from mDb -- mCount = mData.length;
}
@Override公共INT getViewTypeCount(){ リターン1。 }
@Override公共長いgetItemId(int型POS){ 戻りPOS。 }
@Override public boolean hasStableIds(){ return false; }
}
getViewAtと呼ばれるソースクラス() – Rudy
@Rudyを置く - フレームワークは、私はその私は真実でもユニークなIDを持つとそれを試してみましたバグ – Ran
を呼んでいます。いいえ... – Sameer