0

我正在使用ListViewwithin NestedScrollView,但在 .in 中看不到超过 1 个项目ListView。我可以滚动到TextViewtextContact)的末尾,但不能在ListViewlistContact)内滚动。

这是 .xml 文件的代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    ... >
    <android.support.design.widget.CoordinatorLayout
        ... >    
        <LinearLayout
            ...
            android:orientation="vertical">

            <android.support.v7.widget.Toolbar
                ... />
            <android.support.v4.widget.NestedScrollView
                ... >
                <LinearLayout
                    ...
                    android:orientation="vertical">

                    <TextView
                        android:id="@+id/textContact"
                        ... />
                    <LinearLayout
                        ...
                        android:orientation="vertical">
                        <ListView
                            android:id="@+id/listContact"
                            ... />
                    </LinearLayout>
                </LinearLayout>

            </android.support.v4.widget.NestedScrollView>

        </LinearLayout>

    </android.support.design.widget.CoordinatorLayout>

    <android.support.design.widget.NavigationView
        ... />

</android.support.v4.widget.DrawerLayout>

是否有任何设计问题、此处使用的小部件/控件的任何兼容性问题,或其他任何问题?

4

4 回答 4

5

您需要在NestedScrollView中启用以下两个属性,

<android.support.v4.widget.NestedScrollView xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/scrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

然后使用辅助类来扩展ListView宽度并修复滚动功能,

import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.ListView;

public class Helper {
    public static void getListViewSize(ListView myListView) {
        ListAdapter myListAdapter = myListView.getAdapter();
        if (myListAdapter == null) {
            //do nothing return null
            return;
        }
        //set listAdapter in loop for getting final size
        int totalHeight = 0;
        for (int size = 0; size < myListAdapter.getCount(); size++) {
            View listItem = myListAdapter.getView(size, null, myListView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }
      //setting listview item in adapter
        ViewGroup.LayoutParams params = myListView.getLayoutParams();
        params.height = totalHeight + (myListView.getDividerHeight() * (myListAdapter.getCount() - 1));
        myListView.setLayoutParams(params);
        // print height of adapter on log
        Log.i("height of listItem:", String.valueOf(totalHeight));
    }
}

要在设置ListView适配器时使用帮助程序类,

listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, listview_array));
              Helper.getListViewSize(listView);

PS:确保您已经为您的项目添加了支持设计库。

compile 'com.android.support:design:23.4.0'
于 2016-08-23T15:21:06.297 回答
3

使用ViewCompat.setNestedScrollingEnabled()在您listview和您的问题上应该得到解决。

于 2017-12-13T00:21:24.117 回答
0
  <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:clipToPadding="false" >
       </android.support.v7.widget.RecyclerView>

您是否缺少应用程序:layout_behavior

于 2016-08-23T15:34:49.837 回答
0

我认为,你有糟糕的布局设计,你应该重新设计它。通常,您不应该像ListView在另一个可滚动视图(如NestedScrollViewor )中那样拥有可滚动视图ScrollView。你真的需要那个吗?尝试改变它,扁平化你的视图结构,这个问题应该会消失。

于 2016-08-23T15:28:22.613 回答