【问题标题】:Hiding footer in ListView在 ListView 中隐藏页脚
【发布时间】:2011-09-27 21:50:20
【问题描述】:

当我的 Activity 加载时,我会扩充一个用于页脚的布局文件。我将它附加到 ListView (addFooterView),然后将其可见性设置为 View.GONE。我维护对它的引用,当我希望用户看到它时,我将可见性设置为 View.VISIBLE。

在大多数情况下,这很有效。但是,页脚似乎仍然占用空间。如果用户使用滚轮/pad,页脚占用的区域会突出显示。我想进一步润色,这样页脚就完全消失了;理想情况下,不要将其从 ListView 中分离出来。

这可能吗?还是我必须设置/取消设置脚而不是简单地切换其可见性?

【问题讨论】:

  • 你不能从 ListView 中分离页脚,AFAIK。
  • ListView有一个方法“removeFooterView(View v)”
  • 对不起,我很抱歉错过了。
  • 它真的很没用,因为它只有在 ListView.setAdapter 之前使用它才有效,通常在 ListActivity 的 onCreate() 中使用。
  • 这可能是我忘记它的原因... :-)

标签: android listview


【解决方案1】:

您可以使用listView.removeFooterView(view)。最简单的方法是创建一个实例变量来保存膨胀的页脚视图(所以你只能在 onCreate() 中膨胀它)。然后根据需要拨打listView.addFooterView(instanceFooter)listView.removeFooterView(instanceFooter)

编辑: 这是我正在做的工作:

  1. onCreate 中扩展页脚布局
  2. onResume: IF 适配器没有被实例化,调用addFooterView() THEN 初始化你的适配器(保留一个实例引用)并调用setAdapter()。这将使ListView “准备好”
  3. onResume:用数据更新适配器(我的数据在一个单独的类中)并调用notifyDatasetChanged()
  4. 调用removeFooterView()(如果它正在显示它会隐藏它,否则什么都不做)
  5. 如果需要显示页脚,请致电addFooterView()

【讨论】:

  • 我认为这行不通。如果我没记错的话,你必须在设置适配器之前添加页脚才能显示它。
  • 我刚刚测试了一下,我的记忆似乎是准确的。
  • 如果我使用 mList.setAdapter(mAdapter); 这将起作用而不是 mAdapter.notifyDataSetChanged();,但这似乎有点傻。它还会扰乱 ListView 的滚动。
  • Err,这完全适合我。但是在必须首先添加页脚的意义上,你是对的,尽管这是添加页脚的规则(他已经成功地做到了)。但是,是的,诀窍是无论您是否要显示它,都将其添加到开头,然后按需调用removeFooter()/addFooter()。我将用我如何工作的步骤更新答案。
  • 如果您在设置适配器之前调用 addFooter() 一次,这确实有效。
【解决方案2】:

您可以切换可见性。为此,您需要使用线性布局包装页脚的内容,然后将线性布局可见性设置为 GONE。

在下面的示例中,我将 LogoLinearLayout 的可见性设置为 GONE 并且它起作用了。

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <LinearLayout
            android:id="@+id/LogoLinearLayout"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <ImageView
                android:id="@+id/Logo"
                android:src="@drawable/Logo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/spacing3"
                android:layout_marginBottom="@dimen/spacing3"
                android:layout_gravity="center" />
        </LinearLayout>
    </LinearLayout>

【讨论】:

    【解决方案3】:

    当您调用 addFooterView 以禁用页脚选择和突出显示时,将 isSelectable 参数设置为 false

    【讨论】:

      【解决方案4】:

      尝试使用 View.INVISIBLE 而不是 View.GONE。 (我没试过,但它可能有效)

      【讨论】:

      • 这不起作用。这似乎是一个远射,但我还是尝试了它,但无济于事。将可见性设置为 View.GONE 时,我基本上得到了 View.INVISIBLE 的结果。
      猜你喜欢
      • 1970-01-01
      • 2017-02-06
      • 2015-03-21
      • 2014-04-08
      • 2012-07-11
      • 1970-01-01
      • 2013-01-11
      • 2020-01-23
      • 1970-01-01
      相关资源
      最近更新 更多