顶部的android listview加载以前的帖子按钮

顶部的android listview加载以前的帖子按钮,android,json,listview,chat,Android,Json,Listview,Chat,我有一个消息传递应用程序。我可以通过json从mysql数据库获取消息和列表。当我收到消息时(例如最后10条消息和更新的消息在底部),第一条记录显示在顶部,所以用户必须向下滚动才能看到最后一条消息。我想把焦点放在最后一条消息上,当用户滚动到顶部时,我想在那里放一个加载以前的消息按钮。我发现加载更多按钮,但它在页面底部。我该怎么做? 我的代码如下: // Hashmap for ListView categoryList = new ArrayList<HashMap<Str

我有一个消息传递应用程序。我可以通过json从mysql数据库获取消息和列表。当我收到消息时(例如最后10条消息和更新的消息在底部),第一条记录显示在顶部,所以用户必须向下滚动才能看到最后一条消息。我想把焦点放在最后一条消息上,当用户滚动到顶部时,我想在那里放一个加载以前的消息按钮。我发现加载更多按钮,但它在页面底部。我该怎么做? 我的代码如下:

 // 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处设置索引。所以基本上,do
categoryList.add(0,newData)
并进行
循环
以始终在顶部添加新数据:这正是您要查找的内容(Runnable除外)。
// start from bottom
lv.setStackFromBottom(true);