好的,让我解释“完美无效”的含义。
我有一个没有android:stackFromBottom="true"
参数的列表视图。我还有一个常规getItem(position)
的ArrayAdapter。我打电话给我的网络服务器,获取asc日期订单的数据。
这样,列表中位置0(顶部)的项目具有最小的日期。我可以滚动顶部>底部。好。
我添加了android:stackFromBottom
,现在我看到现在你可以从底部>顶部开始掠夺,但位置0中的项目仍然是顶级项目,并且日期最小。所以适配器没有改变它的顺序。
解决此问题的唯一方法是更改适配器内的getItem(getCount()-1-position)
。但是,我添加并通知适配器,适配器仍然会将项目添加到底部。
我猜结构是ListView -> Adapter -> Row Views
所以无论stackFromBottom
值是什么,只有一个子节点,即适配器。正确?
无论如何,如何以相反的顺序使用适配器的ListView?
答案 0 :(得分:5)
这样做的一个很好的方法是覆盖你的Adapter.getItem()
方法,以相反的顺序返回项目。
这是Adapter
的一个很好的模式,因为它不需要为了显示目的而对数据进行不同的排序(排序列表可能会有开销,或原始订单重要的其他原因在应用程序的另一部分)。
而是适配器显示更改而不影响基础数据集。
以下是我使用的内容:
@Override
public MyListItemClass getItem(int position)
{
return super.getItem(getCount() - 1 - position);
}
这是基于此问题的@mes's answer:
查看该主题,讨论其他可能的解决方案。
答案 1 :(得分:3)
我高估了android:stackFromBottom
的力量。它基本上做的是类似于“gravity:bottom”。它不会以相反的顺序添加项目,但它只是使内容与列表视图的底部对齐。
我仍在寻找反向适配器解决方案。
答案 2 :(得分:0)
也许您应该将其与AbsListView.setTranscriptMode(int)
一起使用我有一个聊天应用程序,我提供两种显示对话的模式 - 使用AbsListView.setStackFromBottom(boolean)
来自底部或顶部
答案 3 :(得分:0)
LinearLayoutManager mLinearLayoutManager = new LinearLayoutManager(Application.get());
mLinearLayoutManager.setStackFromEnd(true);
mLinearLayoutManager.setReverseLayout(true);
list.setLayoutManager(mLinearLayoutManager);
试试这个希望这会对你有帮助。
答案 4 :(得分:0)
我建议使用比较器根据您想要的订单日期返回对象。这样做将确保数据始终按您想要的顺序而不是服务器发送的顺序。您可以查看如何使用排序here