Android将页脚添加到ListView addFooterView()?

Posted

技术标签:

【中文标题】Android将页脚添加到ListView addFooterView()?【英文标题】:Android adding footer to ListView addFooterView()? 【发布时间】:2011-03-14 17:17:16 【问题描述】:

我有一个 ListView 活动,它需要项目列表的页脚,以便您可以单击它并将更多项目加载到列表中。该列表由字符串映射支持的 SimpleAdapter 支持,在设置适配器之前,我这样做是为了添加页脚:

mInflater.inflate(R.layout.list_load_more_row, null);

TextView footer = (TextView) findViewById(R.id.loadMore);

getListView().addFooterView(footer);

setListAdapter(ListViewHelper.getAdapterForContentList(mContent, this));

但我在调试器中遇到了这个异常

java.lang.NullPointerException android.widget.ListView.clearRecycledState(ListView.java:489) android.widget.ListView.resetList(ListView.java:476) android.widget.ListView.setAdapter(ListView.java:417)

出了什么问题,我将如何将页脚添加到列表中?

[编辑] 活动正在使用 list_load_more_row.xml:

  <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/loadMore"
        android:layout_
        android:layout_
        android:textSize="17sp"
        android:textStyle="bold"
        android:textColor="#000000"  
        android:ellipsize="marquee"  
        android:marqueeRepeatLimit="marquee_forever"
        android:gravity="center_horizontal|center_vertical"
        android:text="@string/hello" />

【问题讨论】:

您可能也应该发布您的 XML。 可能需要更多代码,能否发布更详细的 logcat 报告? 它可能没有发现 R.id.loadMore 膨胀 抱歉忘记了刚刚添加的重要行...还添加了 id loadMore 所在的 xml 文件 【参考方案1】:

好吧,我找到了解决我的问题的方法,如果我这样做,它会按预期工作:

View view = mInflater.inflate(R.layout.list_load_more_row, null);

TextView footer = (TextView) view.findViewById(R.id.loadMore);

getListView().addFooterView(footer);

setListAdapter(ListViewHelper.getAdapterForContentList(mContent, this));

我猜,由于我将 null 作为父参数放入 inflater 中,因此该视图尚未添加到当前内容视图中,因此 mainActivity 无法找到它,现在因为我明确使用父视图由充气机返回以查找它正在工作的 TextView。

【讨论】:

我希望你能得到这个视图,我需要你的帮助在我的列表视图底部设置页脚,最初页脚出现在列表视图的底部并且它有点击选项来加载更多,点击事件后数据已加载,但每次单击页脚时页脚都会向下移动。让帮助我解决这个问题。 不确定您所说的“点击事件后数据已加载但页脚在每次点击页脚时向下移动”但我在获取新数据后所做的是创建一个新的适配器和然后再次调用“setListAdapter()”。然而,这使得列表从顶部开始,所以我通过调用 'getListView().setSelection(newPosition)' 来调整列表的位置希望有帮助! 使用 SDK 21,如果将 null 传递给 inflate,则会收到警告。相反,请使用mInflater.inflate(R.layout.list_load_more_row, getListView(), false)【参考方案2】:

正如 ognian 在他上面的评论中所说,可能找不到 loadMore。

您可以通过将代码更改为以下内容来查看这是否是问题:

TextView footer = (TextView) findViewById(R.id.loadMore);
if ( footer != null ) 
  getListView().addFooterView(footer);
  setListAdapter(ListViewHelper.getAdapterForContentList(mContent, this));
 else 
  throw new NullPointerException("footer is null");

没有看到更多的代码,很难说真正的原因是什么。

【讨论】:

嘿,谢谢,你的权利似乎没有找到 loadMore...添加更多代码希望有帮助【参考方案3】:
View footerView = getLayoutInflater().inflate(R.layout.search_footer,
            mContentList, false);
    LongButton mSearchMoreBtn = (LongButton) footerView
            .findViewById(R.id.searchmore_btn);
    mSearchMoreBtn.setText(R.string.search_moreapp);//the button to add 
    mSearchMoreBtn.setBackgroundResource(R.drawable.btn_long_selector);
    mSearchMoreBtn.setOnClickListener(mSearchMoreBtnListener);

    footerView.setOnClickListener(mLoadMoreAppsListener);
    mContentList.addFooterView(footerView);  

我不知道当我将mSearchMoreBtn 添加到ListViewfooterView 时,这是错误的,相反,当我将footerView 添加到ListView 时,它就好了

【讨论】:

以上是关于Android将页脚添加到ListView addFooterView()?的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 中加载动态项目时无法将页脚视图添加到列表视图

如何将页脚添加到 NavigationView - Android 支持设计库?

将页脚添加到部分的开始/标题页

无法将页脚添加到集合视图

将页脚添加到 Angular Material Datepicker

可以将页脚添加到 MVCContrib 网格吗?