我正在编写一个应用程序,它从服务器检索地点信息并将其显示在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);
}
非常感谢任何帮助。