【问题标题】:How to add add data at the top of a listview如何在列表视图顶部添加添加数据
【发布时间】:2014-12-06 15:53:14
【问题描述】:

我正在开发一个在列表视图中显示日期的 android 日历应用程序。我能够在向下滚动时实现向列表视图添加数据。现在我想在向上滚动时做同样的事情。如何将数据添加到列表视图的顶部并滚动到列表视图的第一个数据之外?

这是我的代码。

public class AllEventFragment extends Fragment{
private final int INITIAL_DAYS = 14;

private final int THRESHOLD = 14;
private  int currentPage = 0;
private int previousTotal = 0;
private boolean loading = true;

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
   mListView = (ListView) getView().findViewById(R.id.list);

    mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
        private int mLastItem;

        @Override
        public void onScrollStateChanged(AbsListView absListView, int i) {

        }

        @Override
        public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount,   
        int totalItemCount) {

            if (loading){
                if (totalItemCount > previousTotal){
                    loading = false;
                    previousTotal = totalItemCount;
                    currentPage++;
                }
                if(totalItemCount < totalItemCount){
                    loading = false;
                    previousTotal = totalItemCount;
                    currentPage++;
                }
            }
            if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + THRESHOLD)){
                addMoreDaysToBottom( currentPage + 1);
                loading = true;
            }
          }

【问题讨论】:

    标签: java android listview android-listview data-structures


    【解决方案1】:

    使用 Vector 来存储项目。

    实现 ListAdapter,它返回 Vector 中的项目。

    当您需要在顶部添加一个项目时,将其作为该 Vector 的第一个元素插入

    刷新ListView的适配器

    【讨论】:

    • 我已经做到了,并且能够在向下滚动时添加数据(但没有将那部分代码添加到上面显示的 sn-p 中)。我现在的问题是当用户尝试超出 ArrayList 中的第一个元素时,如何以编程方式将数据添加到列表顶部。换句话说,与我已经做过的相反。
    • 你的意思是像 Facebook 应用的拉动刷新效果吗?
    • 实际上并没有真正拉动刷新效果。一个紧密的例子是 WhatsApp 聊天列表视图中的“加载早期消息”。由于我的是日历应用程序,因此当用户尝试超出 arraylist 中的第一个初始化元素(即今天的日期)时,前几天的日期将被添加到 listView 中。我如何确定用户何时尝试通过 ScrollListener 超出数组列表的第一个元素。
    • 查看 c = listview.getChildAt(0); int scrolly = -c.getTop() + listview.getFirstVisiblePosition() * c.getHeight();如果 scrolly 为零,则表示列表位于顶部。但是如果你想要一个过度滚动的效果,你需要做更多的工作
    猜你喜欢
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多