【问题标题】:Android listview footer viewAndroid listview 页脚视图
【发布时间】:2014-09-19 17:47:29
【问题描述】:

页脚视图有问题。我使用动态加载项目制作列表视图。在页脚视图中单击按钮时。在需要时通过调用两个 next 方法将页脚附加到列表视图:

protected void addFooterView() {
        removeFooterView();
        searchListView.post(new Runnable() {
            @Override
            public void run() {
                ListAdapter adapter = searchListView.getAdapter();
                searchListView.setAdapter(null);
                searchListView.addFooterView(footerView);
                searchListView.setAdapter(adapter);
            }
        });
    }

    protected void removeFooterView() {
        searchListView.post(new Runnable() {
            @Override
            public void run() {
                if (searchListView.getFooterViewsCount() > 0) {
                    ListAdapter adapter = searchListView.getAdapter();
                    searchListView.setAdapter(null);

                    while (searchListView.getFooterViewsCount() > 0) {
                        searchListView.removeFooterView(footerView);
                    }

                    searchListView.setAdapter(adapter);
                }
            }
        });
    }

膨胀视图:

   private void declareViewAndButton(View view) {
        this.searchListView = (ListView) view.findViewById(R.id.searchListView);
        this.footerView = LayoutInflater.from(getActivity()).inflate(R.layout.search_list_view_footer, searchListView, false);
    }

所以,当页脚视图进入可见位置列表视图的底部时。并通过滚动返回,页脚视图高度大小是动态变化的。如何解决?或者告诉我在哪里可以找到问题的原因?对不起我的英语。

【问题讨论】:

    标签: android android-listview


    【解决方案1】:

    从 KITKAT api 开始,您可以在任何地方调用 aading/removing 页脚和页眉方法,设置适配器与否无关紧要。 就像在官方文档中说的那样,在设置适配器之前需要调用 aading/removing 页脚和页眉视图。但这几乎是真的,如果在你的情况下需要管理页脚而不是页眉。在某些设备页脚工作成功,在另一个需要单个重置适配器后,工作正常。我不知道,这是错误还是功能!

    所以,经过一些实验,我编写了添加和删除页脚视图的方法。效果很好:

    protected void addFooterView() {
            removeFooterView();
            searchListView.post(new Runnable() {
                @Override
                public void run() {
                    searchListView.addFooterView(footerView);
    
                    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
                        int lastViewedPosition = searchListView.getFirstVisiblePosition();
                        View v = searchListView.getChildAt(0);
                        int topOffset = (v == null) ? 0 : v.getTop();
    
                        searchListView.setAdapter(searchAdapter);
                        searchListView.setSelectionFromTop(lastViewedPosition, topOffset);
                    }
                }
            });
        }
    
        protected void removeFooterView() {
            searchListView.post(new Runnable() {
                @Override
                public void run() {
                    while (searchListView.getFooterViewsCount() > 0) {
                        searchListView.removeFooterView(footerView);
                    }
                }
            });
        }
    

    在 19、16、10 api 上测试。

    【讨论】:

      猜你喜欢
      • 2011-03-06
      • 1970-01-01
      • 2012-01-01
      • 2011-01-02
      • 1970-01-01
      • 2014-07-07
      • 1970-01-01
      • 2015-06-02
      • 2014-08-02
      相关资源
      最近更新 更多