顶部的android listview加载以前的帖子按钮
我有一个消息传递应用程序。我可以通过json从mysql数据库获取消息和列表。当我收到消息时(例如最后10条消息和更新的消息在底部),第一条记录显示在顶部,所以用户必须向下滚动才能看到最后一条消息。我想把焦点放在最后一条消息上,当用户滚动到顶部时,我想在那里放一个加载以前的消息按钮。我发现加载更多按钮,但它在页面底部。我该怎么做? 我的代码如下:顶部的android listview加载以前的帖子按钮,android,json,listview,chat,Android,Json,Listview,Chat,我有一个消息传递应用程序。我可以通过json从mysql数据库获取消息和列表。当我收到消息时(例如最后10条消息和更新的消息在底部),第一条记录显示在顶部,所以用户必须向下滚动才能看到最后一条消息。我想把焦点放在最后一条消息上,当用户滚动到顶部时,我想在那里放一个加载以前的消息按钮。我发现加载更多按钮,但它在页面底部。我该怎么做? 我的代码如下: // Hashmap for ListView categoryList = new ArrayList<HashMap<Str
// Hashmap for ListView
categoryList = new ArrayList<HashMap<String, String>>();
// get listview
ListView lv = getListView();
Button btnLoadMore = new Button(this);
btnLoadMore.setText("Load older messages");
FrameLayout footerLayout = (FrameLayout) getLayoutInflater().inflate(R.layout.listfooter,null);
lv.addFooterView(btnLoadMore);
//ListView的Hashmap
categoryList=新的ArrayList();
//获取列表视图
ListView lv=getListView();
按钮btnLoadMore=新按钮(此按钮);
btnLoadMore.setText(“加载旧消息”);
FrameLayout footerLayout=(FrameLayout)getLayoutInflater().inflate(R.layout.listfooter,null);
lv.addFooterView(btnLoadMore);
正如我在评论中所说的,只需将addFooterView()
更改为在列表顶部提供更多负载的方法。此方法使用三个参数(至少一个:查看自),它们是:
- 视图v:要在顶部添加的加载更多视图
- 对象数据:与视图关联的数据
- 布尔值可选择:使视图可选择或不可选择的值
android:listSelector
属性阻止视图上的颜色状态。实际上,有时您希望阻止页眉/页脚视图上的背景状态。也就是说,方法可能是:
lv.addHeaderView(headerLayout, null, false); // this isn't clickable now
注意:现在,您可以调用视图变量headerLayout
,而不是footerLayout
;)
据我了解,您的需求,HeaderView
应该在其中添加更多按钮,以避免动态创建,如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Load More"
android:onClick="loadMoreDatas" />
</LinearLayout>
最后,要聚焦到特定的项目,在您的情况下,列表中的最后一个项目(在底部),您应该使用setSelection(int-position)
which转到其参数中选定的索引。然后,在设置了适配器之后,在列表视图中调用该适配器,如下所示:
// set the adapter
setListAdapter(adapter);
// go to selection (last item)
lv.setSelection(adapter.getCount() - 1);
getCount()
方法(通常)使用ArrayList
size。然后,必须防止出现错误,因为数组以位置0
开始,而不是1
开始。因此,最后一个位置是“所有项目减去第一个位置(0)”
但是,从列表底部开始的完美方法是:
当stack from bottom设置为true时,列表将从视图底部开始填充其内容
那么,最好有:
// start from bottom
lv.setStackFromBottom(true);
这应该可以做到,我希望这会有用。只需使用addFooterView()
更改addHeaderView()
可能会有所帮助。谢谢您的回答。那么,我如何才能关注底部和最后一条消息?很好的解决方案,那么,在单击“加载旧消息”按钮后,我如何才能说“将此消息添加到列表视图的顶部”?使用add
方法,您可以在第一个参数@BilalTürk处设置索引。所以基本上,docategoryList.add(0,newData)
并进行循环
以始终在顶部添加新数据:这正是您要查找的内容(Runnable除外)。
// start from bottom
lv.setStackFromBottom(true);