スピナーを動的に正しく更新するにはどうすればよいですか?
-
12-11-2019 - |
質問
データベースからのオブジェクトを表示するカスタム アダプターを備えたスピナーがあります。オブジェクト リストが変更された場合は、リストを使用して新しいアダプターを作成し、それをスピナーに適用します。その後、最初の項目が選択されるので、これを試しました:
// 5th item selected
int pos = spinner.getSelectedItemPosition();
spinner.setAdapter(newAdapter);
// 0th item selected
spinner.setSelectedItem(pos);
// 5th item is selected
しかし、GUI には最初の項目が表示されたままですか?
spinner.invalidate()
役に立ちませんでした。
これは私が望むものを達成するための正しい方法ですか?この動作に関する情報はまったく見つかりませんでした。
解決
解決済み:主な問題はカスタム スピナー アダプターだったと思います。これでうまくいきました
if (spinner.getCount() > 0) {
pos = spinner.getSelectedItemPosition();
}
MySpinnerAdapter adapter = new MySpinnerAdapter(context, myNewObjects);
spinner.setAdapter(adapter);
spinner.setSelection(pos); // needed
adapter.notifyDataSetChanged();
他のヒント
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
spinner.setSelectedItem(5);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
試してみましたか notifydatasetChanged()
または notifydatasetInvalidate()
アダプターの方式です。
newAdapter.notifydatasetChanged()
所属していません StackOverflow