繁体   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