ScrollView中不可滚动的ListView

Den*_*nis 66 android scrollview android-listview

我正在尝试制作这样的布局:

布局

问题是我不希望ListViews可滚动.我希望它们尽可能高,并使整个屏幕可滚动.如果我将ListView的高度设置为ListViews,则不起作用.使它工作的唯一方法是设置一个特定的高度 - 但我不知道ListView中有多少项.

我知道我不应该将ListView放在ScrollView中 - 但我不希望ListView可以滚动,只是为了显示所有项目.

也许还有更好的方法让它发挥作用?

Ded*_*mar 152

您创建不可滚动的自定义ListView

public class NonScrollListView extends ListView {

    public NonScrollListView(Context context) {
        super(context);
    }
    public NonScrollListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public NonScrollListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(
                    Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
            super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom);
            ViewGroup.LayoutParams params = getLayoutParams();
            params.height = getMeasuredHeight();    
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的布局资源文件中

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fadingEdgeLength="0dp"
    android:fillViewport="true"
    android:overScrollMode="never"
    android:scrollbars="none" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <!-- com.Example Changed with your Package name -->

        <com.Example.NonScrollListView
            android:id="@+id/lv_nonscroll_list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
        </com.Example.NonScrollListView>

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/lv_nonscroll_list" >

            <!-- Your another layout in scroll view -->

        </RelativeLayout>
    </RelativeLayout>

</ScrollView>
Run Code Online (Sandbox Code Playgroud)

在Java文件中

创建customListview的对象而不是ListView,如:
NonScrollListView non_scroll_list =(NonScrollListView)findViewById(R.id.lv_nonscroll_list);

  • @Dedaniyahirenkumar,但是,如果测量模式切换到`UNSPECIFIED`,则父ScrollView`保持滚动Y =零(预期行为).但是,显然,在这种情况下,`NonScrollListView`不会显示其全部内容. (4认同)
  • 这对我来说非常完美.谢谢! (4认同)
  • 太棒了,这太好用了.谢谢. (4认同)
  • @Dedaniyahirenkumar,当android显示包含`NonScrollListView`的布局时,父`ScrollView`滚动到`NonScrollListView`的顶部,而不是`ScrollView`的顶部.(用户必须向上滚动到`NonScrollListView`之前的`ScrollView`内容.)这种情况发生在`EXACTLY`和`AT_MOST`测量模式,以及传递给`makeMeasureSpec()的任何整数高度. (3认同)
  • 很棒的答案应该是公认的! (3认同)
  • 将其交换到现有代码库时,可能只需要在添加新类后修改XML; 将实例转换为`(ListView)`的大多数现有引用应该仍然可以正常工作. (2认同)
  • 这应该是公认的答案.真棒. (2认同)

小智 9

根本不需要使用列表视图.

如果您真的考虑过它,可以在您的情况下使用linearlayout替换listview.适配器将是相同的,但是不是将适配器与listview连接,只需在数据的for循环中调用适配器的getView函数,并将检索到的视图添加到垂直linearlayout.

但是,只有在列表中包含少量项目并且这些项目的显示表示不是内存密集型时,才建议使用此方法.


gun*_*nar 0

嗯,有一个很酷的 Android 人,名叫 Mark Murphy,又名 CommonsWare,他构建了一个非常有用的组件,名为CWAC Merge Adapter,可以让您做您需要的事情。您需要动态添加视图,而不是从 XML 中添加;但考虑到您简单的用户界面,这应该不是问题。当我不知道应该滚动哪种数据时,我将它用于此类情况。

如果您不想使用它(可能出于许可原因),您可以在那里有一个列表视图(而不是那两个连续的列表视图)并 override getItemViewsCountgetItemViewType以便getView给出上面的布局。如果您android listview different rows在 Google 上搜索,您会找到有用的信息。例如这个链接,或者这个

但是,我会选择合并适配器。


归档时间:

查看次数:

39640 次

最近记录:

6 年,1 月 前