我是Eclipse和Android应用程序开发的新手。一直试图解决这个问题两天,但没有运气。浏览网络和文档... ...许多小时。 :S
我有一个ListFragment和一个包含在RelativeLayout中的Button。该按钮位于列表下方,在app启动时列表显示为空,这是我想要的。我正在使用ArrayAdapter,我的项目(现在是String对象)位于ArrayList中。
当我点击该按钮时,列表会使用新项目进行更新,一切正常,但新项目会显示在可见列表的底部,就在按钮上方。如果我再次单击我的按钮,则会在列表底部显示一个新项目,并将第一个项目移动到第二个项目上方。为什么这样,我该如何解决?我希望第一个项目显示在列表顶部,第二个项目显示在该项目下方,第三个项目显示在第二个项目下面,依此类推。
当我添加项目时,我只是将一个项目添加到我的对象列表的开头,然后调用adapter.notifyDataSetChanged()。
如何指定空ListFragment列表中的新项目应显示在列表的最顶部?
一直在玩不同的TRANSCRIPT_MODE,但没有帮助。解决方案可能是微不足道的...但我找不到解决方案。救命啊!
答案 0 :(得分:1)
如果您要在ListView
的顶部添加商品,则需要在商品列表的顶部插入商品。
List items = new ArrayList();
for(Object obj : objectList) { // objectlist is a list of new items
items.add(0, obj); // INSERT AT TOP
listAdapter.notifyDataSetChanged();
}
答案 1 :(得分:1)
我会在这里回答我自己的问题。
改变
android:layout_height="wrap_content"
到
android:layout_height="match_parent"
片段 XML标记中的修复了它。我仍然不明白为什么wrap_content首先使列表项显示在屏幕底部。也许有些错误与在ListFragment中使用时,wrap_content如何与最初的空列表一起使用?
答案 2 :(得分:0)
更清楚。
items.add(OBJ); 当我反复点击按钮时,这将填充我的初始空列表。
items.add(0,obj); 这样做也是如此,只有项目的内部顺序相反。
在两种情况下,应用程序运行时的第一个可见项目显示在添加按钮(位于屏幕底部)上方。我希望第一个项目显示在ActionBar下方。 ListFragment位于相对布局中,并且定义如下
<!-- this file is included in both single-pane and two-pane versions of the layout-->
<!-- i use merge to avoid code duplication -->
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<Button
android:id="@+id/button_add"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:onClick="onClick"
android:text="@string/button_add"/>
<fragment
android:id="@+id/item_list"
android:name="com.example.test.ItemListFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/button_add"
tools:context=".ItemListActivity"
tools:layout="@android:layout/list_content"/>
</merge>