![](/img/trans.png)
[英]Update City Spinner with notifyDataSetChanged after state is selected
[英]Spinner Displayed Value (Selection) Changing After Adapter Update (notifyDataSetChanged)
我有一個微調器。 選擇一個項目並通過notifyDataSetChanged更新適配器后,顯示在Spinner(Textview)中的所選項目將更改。 此功能是設計使然。 因為所選位置保持不變,但是所選位置的值由於更新適配器中的新內容而發生了變化。
我想在適配器更新后繼續顯示最初選擇的項目。
我希望此解決方案能起作用,但事件/列表永遠不會觸發。 也許是因為我使用的是Spinner而列表沒有顯示出來?
https://stackoverflow.com/a/29173680/2330272
mListView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
mListView.removeOnLayoutChangeListener(this);
Log.e(TAG, "updated");
}
});
mAdapter.notifyDataSetChanged();
使用至少兩個問題更新幫助:
在為adpater調用notifyDataSetChanged之后,如何確定Spinner何時完成更新視圖?
如何在適配器中找到值(標簽)的位置(索引)? 當適配器排隊或元素循環通過時?
如果要維護當前選定的項目 ,而不是當前選定的位置 ,則必須實現適配器的getItemId(int position)
回調,這樣:
常見的getItemId()
只是返回零,或者返回項目的position
。 這些都不能在這種情況下工作。 理想情況下,您將具有可以返回的實際邏輯ID,但是如果您僅有的是String
則可以使用字符串的hashCode()
方法:
@Override
public String getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return list.get(position).hashCode();
}
兩個不同的字符串不太可能具有相同的哈希碼,但這並非不可能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.