BottomSheet中的ListView

时间:2016-11-27 15:07:32

标签: android listview bottom-sheet

我正在编写一个应用程序,它从服务器检索地点信息并将其显示在BottomSheet内的ListView上,就像Google Maps应用程序的行为一样。但是,我面临两个问题:

1)当BottomSheet被解雇时,执行另一次搜索时不会首先显示ListView - 只有当我与屏幕交互时(在其他地方放置标记或触摸BottomSheet)才会显示列表。< / p>

2)当BottomSheet展开时,我无法折叠它,因为ListView是拦截触摸事件的那个。如果不是,就没有办法滚动列表。在ListView上设置android:nestedScrollingEnabled="true"也不起作用:ListView能够向上滚动,但向下滚动会折叠工作表。

以下是我的代码的相关部分:

活动布局文件中的BottomSheet

    <android.support.v4.widget.NestedScrollView
        android:id="@+id/bottom_sheet"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true"
        android:background="#ffffff"
        app:layout_behavior="@string/bottom_sheet_behavior">
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <ListView
                android:id="@+id/list_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:divider="@drawable/list_divider"
                android:dividerHeight="1dp"
                android:clickable="true"
                android:nestedScrollingEnabled="true"
                />
            <ProgressBar
                android:id="@+id/circular_indicator"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center|top"
                android:layout_marginTop="24dp"
                android:indeterminate="true"
                android:visibility="invisible"/>
        </FrameLayout>
    </android.support.v4.widget.NestedScrollView>

底部代码

    View bottomSheet = findViewById(R.id.bottom_sheet);
    mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
    mBottomSheetBehavior.setHideable(true);
    mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
        @Override
        public void onStateChanged(@NonNull View bottomSheet, int newState) {
            switch (newState) {
                case BottomSheetBehavior.STATE_HIDDEN:
                    mFAB.show();
                    adapter.clear();

                    break;
            }
        }

        @Override
        public void onSlide(@NonNull View bottomSheet, float slideOffset) {

        }
    });

活动中的AsyncTask

protected void onPreExecute() {
        mProgress.setVisibility(View.VISIBLE);

        mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
        mBottomSheetBehavior.setPeekHeight(500);

        mFAB.hide();
}

    @Override
    protected void onPostExecute(ArrayList<City> cities) {
        super.onPostExecute(cities);

        for (City c : cities) {
            adapter.add(c);
        }

        mProgress.setVisibility(View.GONE);
    }

非常感谢任何帮助。

0 个答案:

没有答案