Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android:stackFromBottom=";“真的”;似乎无法正常工作(使用适配器反转ListView)_Android_Android Listview_Android Adapter_Android Adapterview - Fatal编程技术网

android:stackFromBottom=";“真的”;似乎无法正常工作(使用适配器反转ListView)

android:stackFromBottom=";“真的”;似乎无法正常工作(使用适配器反转ListView),android,android-listview,android-adapter,android-adapterview,Android,Android Listview,Android Adapter,Android Adapterview,好的,让我解释一下“不能完美工作”是什么意思 我有一个没有android:stackFromBottom=“true”参数的列表视图。我还有一个带有常规getItem(position)的阵列适配器。我调用我的Web服务器,获取asc日期顺序上的数据 这样,列表中位置0(顶部)的项目具有最小的日期。我可以滚动顶部->底部。好 我添加了android:stackFromBottom,现在我看到现在可以从底部->顶部开始搜索,但是位置0的项目仍然是顶部项目,并且日期最小。因此,适配器没有更改其顺序

好的,让我解释一下“不能完美工作”是什么意思

我有一个没有
android:stackFromBottom=“true”
参数的列表视图。我还有一个带有常规
getItem(position)
的阵列适配器。我调用我的Web服务器,获取asc日期顺序上的数据

这样,列表中位置0(顶部)的项目具有最小的日期。我可以滚动顶部->底部。好

我添加了
android:stackFromBottom
,现在我看到现在可以从底部->顶部开始搜索,但是位置0的项目仍然是顶部项目,并且日期最小。因此,适配器没有更改其顺序

解决此问题的唯一方法是在适配器内部更改
getItem(getCount()-1-position)
。但是,我添加并通知适配器,适配器仍然会将项目添加到底部

我猜结构是
ListView->Adapter->Row Views
,因此无论
stackFromBottom
值如何,只有一个子项,即适配器。对吧?


无论如何,怎么能让一个带有适配器的列表视图按相反的顺序运行呢?

我高估了android:stackFromBottompower。它的基本功能类似于“重力:底部”。它不会按相反的顺序添加项目,但只会使内容与listview的底部对齐


我仍在寻找反向适配器解决方案。

一个很好的方法是重写
适配器.getItem()
方法,以反向顺序返回项目本身

对于
适配器来说,这是一种很好的模式,因为它不需要仅为了显示目的而对数据进行不同的排序(排序列表时可能会有开销,或者其他一些原因说明原始顺序在应用程序的另一部分中很重要)

相反,适配器显示更改而不影响基础数据集

以下是我使用的:

@Override
public MyListItemClass getItem(int position)
{
    return super.getItem(getCount() - 1 - position);
}
这是基于对这一相关问题的回答:


查看该线程以讨论其他可能的解决方案。

也许您应该将其与
AblistView一起使用。setTranscriptMode(int)
我有一个聊天应用程序,我提供了两种显示对话的模式-使用
AblistView从下或从上。setStackFromBottom(布尔)


试试这个,希望能对你有所帮助。

我建议使用comparator根据你想要的日期顺序返回对象。这样做将确保数据始终按照您想要的顺序发送,而不是服务器发送的数据。您可以检查如何使用sort

它可以通过重写
getItem
方法轻松实现。
 LinearLayoutManager mLinearLayoutManager = new LinearLayoutManager(Application.get());
            mLinearLayoutManager.setStackFromEnd(true);
            mLinearLayoutManager.setReverseLayout(true);
list.setLayoutManager(mLinearLayoutManager);