![](/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.