gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 17:49:48 25 4
gpt4 key购买 nike

我有一个消息传递应用程序。我可以通过 json 从 mysql 数据库获取消息和列表。当我收到消息时(例如,最后 10 条消息和较新的消息位于底部),第一条记录显示在顶部,因此用户必须向下滚动才能看到最后一条消息。我想关注最后一条消息,当用户滚动到顶部时,我想在那里放一个加载以前的消息按钮。我找到了 Load More buttoni,但它位于页面底部。我怎样才能做到这一点?我的代码是这些:

 // 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);

最佳答案

正如我在评论中所说,只需将 addFooterView() 更改为 addHeaderView()方法,在列表顶部为您提供加载更多。此方法使用三个参数(至少一个:View from reference),它们是:

  • View v:要添加到顶部的加载更多 View
  • 对象数据:与 View 相关的数据
  • boolean isSelectable:使 View 可选或不可选的值

使用这三个参数而不是仅使用 View 可以让您通过使用 android:listSelector 属性来阻止它的颜色状态。事实上,有时你想阻止页眉/页脚 View 上的背景状态。也就是说,该方法可能是:

lv.addHeaderView(headerLayout, null, false); // this isn't clickable now

注意:现在,您可以调用 View 变量 headerLayout 而不是 footerLayout ;)

据我了解您的要求,HeaderView 应该有 Load More Button 到其中,以避免动态创建它,如下所示:

<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>

现在,您在列表顶部有了正确的 Button,您可以将处理点击事件的方法添加到 Activity 中(请参阅 android:onClick属性)为:

public void loadMoreDatas(View v) {
// load more messages
}

最后,要关注特定项目,在您的情况下是列表中的最后一项(在底部),您应该使用 setSelection(int position) ,它转到索引在其参数中选择。然后,在设置 Adapter 后,在 ListView 上调用它:

// set the adapter
setListAdapter(adapter);
// go to selection (last item)
lv.setSelection(adapter.getCount() - 1);

getCount() 方法使用(通常)您的ArrayList 大小。然后,你必须防止 IndexOutBoundsException因为您的数组从位置 0 而不是 1 开始。因此,最后一个位置是“所有项目减去第一个位置 (0)”

但是,从列表底部开始的完美方法是 setStackFromBottom() :

When stack from bottom is set to true, the list fills its content starting from the bottom of the view.

那么,最好有:

// start from bottom
lv.setStackFromBottom(true);

这应该可以解决问题,我希望这会很有用。

关于android listview 在顶部加载以前的帖子按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23744282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com