簡體   English   中英

微調器顯示的值(選擇)在適配器更新后更改(notifyDataSetChanged)

[英]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();

使用至少兩個問題更新幫助:

  1. 在為adpater調用notifyDataSetChanged之后,如何確定Spinner何時完成更新視圖?

  2. 如何在適配器中找到值(標簽)的位置(索引)? 當適配器排隊或元素循環通過時?

如果要維護當前選定的項目 ,而不是當前選定的位置 ,則必須實現適配器的getItemId(int position)回調,這樣:

  • 微調器中的每個項目都有一個唯一的ID
  • 同一項目始終具有相同的ID

常見的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM