gpt4 book ai didi

android - 尝试了解 android 支持库 23.2.1 中 BottomSheet 的行为

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:06:27 25 4
gpt4 key购买 nike

我正在尝试在我的一项 Activity 中实现 Bottom sheet,我对它的行为方式感到有点困惑!

所以这就是问题所在,我有一个 Activity ,我试图在其中显示 Bottom Sheet ,我看到了:

  1. 如果我们不设置 app:behavior_peekHeight 属性,那么 Bottom 表单将无法工作

  2. 如果您将 PeekHeight 设置为小于 30dp(基本上只是为了从屏幕上隐藏它)

  3. 如果您在布局文件中将 app:behavior_peekHeight 设置为超过 30dp,并尝试在您的 onCreate 中将 bottomSheetBehavior 的状态设置为 STATE_HIDDEN您的应用程序因此错误而崩溃的方法

原因:

java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.Object java.lang.ref.WeakReference.get()' on a null object reference at android.support.design.widget.BottomSheetBehavior.setState(BottomSheetBehavior.jav a:440)
at myapp.activity.SomeActivity.onCreate(SomeActivity.java:75)

我真的很困惑为什么它不允许我将它隐藏在 onCreate 中?或者为什么我们不能将 peekHeight 设置为 0 以便它在屏幕上不可见,除非我们调用 STATE_EXPANDED 或者甚至不设置该属性应该默认它隐藏!或者至少我应该能够将它设置为隐藏在我的 onCreate 中!

我错过了什么吗?还是 BottomSheet 的行为是死板的?

我的 BottomSheet 布局文件是这样的:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:background="@android:color/white"
android:layout_height="100dp"
android:orientation="vertical"
app:behavior_hideable="true"
app:behavior_peekHeight="40dp" <!-- I cant set this less than 30dp just to hide-->
app:layout_behavior="@string/bottom_sheet_behavior"
tools:context="someActivity"
android:id="@+id/addressbottomSheet"
tools:showIn="@layout/some_activity">

在我的 Activity 中,我正在做这样的事情:

@InjectView(R.id.addressbottomSheet)
View bottomSheetView;
@Override
protected void onCreate(Bundle savedInstanceState) {
....
bottomSheetBehavior = BottomSheetBehavior.from(bottomSheetView);

// only if I have set peek_height to more than 30dp
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
}

在我的 onclick 中,我这样做:

@Override
public void onItemClick(View view, int position) {
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}

最佳答案

在处理这个问题几天后,我找到了一个替代解决方案:

如果我们创建一个 Bottom_Sheet fragment ,然后在 Activity 中实例化它,而不是直接在您的布局中使用 Bottom_sheet,那么这个问题就不会发生, Bottom Sheet 将被隐藏,我们不需要指定 peek_height

这是我做的

public class BottomSheetDialog extends BottomSheetDialogFragment implements View.OnClickListener {
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_bottom_sheet, container, false);
}

然后在我的 Activity 中

bottomSheetDialog = BottomSheetDialog.newInstance(addressList.get(position), position);
bottomSheetDialog.show(getSupportFragmentManager(), AddressActivity.class.getSimpleName());

这实际上解决了我的 Bottom Sheet 在 Activity 开始时没有隐藏的问题,但我仍然无法理解为什么如果直接包含 bottom_sheet 我们会面临这个问题!

关于android - 尝试了解 android 支持库 23.2.1 中 BottomSheet 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36110682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com