Android - представление не является дочерним элементом CoordinatorLayout (BottomSheet) - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть макет, в котором пользователь делает снимок, а фон фрагмента меняется на изображение. У этого макета внизу есть тег, который включает мой макет нижнего листа. Я пытаюсь прикрепить этот нижний лист к фрагменту, который у меня есть, который, как предполагается, надувает макет в, но каждый раз, когда я создаю этот новый фрагмент и пытаюсь заменить область новым фрагментом, я получаю сообщение об ошибке "не ребенок CoordinatorLayout ", хотя на мой взгляд это так. Даже в макете это дочерний элемент координатора. Файлы ниже. Я пытаюсь добавить фрагмент нижнего листа к первичному фрагменту со следующим кодом:

public void showBottomSheetDialogFragment() {
        imageAnalysisBottomSheet = new ImageAnalysisBottomSheet();
        getChildFragmentManager().beginTransaction().replace(R.id.bottom_sheet, imageAnalysisBottomSheet).commit();
        coordinator.setVisibility(View.VISIBLE);
    }

У кого-нибудь есть идеи, как это исправить? Я вижу нижний лист, если не вызываю метод showBottomSheetDialogFragment, но к нему не привязана логика (т.е. я могу что-то сделать, когда пользователь вводит число и т. Д.). Как мне исправить это?

макет с нижней таблицей:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <com.example.cyfi.picture_tab.DrawImageView
        android:id="@+id/image_preview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:contentDescription="ap_picture" />

    <TextView
        android:id="@+id/image_instructions"
        android:paddingStart="20dp"
        android:paddingEnd="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="visible"
        android:fontFamily="sans-serif-black"
        android:textSize="28sp"
        android:text="Click the camera icon below to take a picture of the access point. Ensure that you are taking an extremely clear picture with direct line of sight. "
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/take_picture_button"
        android:visibility="visible"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:src="@drawable/ic_photo_camera_black_24dp"
        app:backgroundTint="@color/silver"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintBottom_toBottomOf="parent" />

    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:id="@+id/coordinator"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="gone"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        >
        <View
            android:id="@+id/shadow"
            android:layout_width="match_parent"
            android:layout_height="16dp"
            android:background="@drawable/shadow_gradient"
            app:layout_anchor="@id/bottom_sheet" />
        <include
            android:id="@+id/bottom_sheet"
            android:visibility="visible"
            layout="@layout/image_analysis"/>
    </androidx.coordinatorlayout.widget.CoordinatorLayout>


</androidx.constraintlayout.widget.ConstraintLayout>

макет анализа изображения (макет в теге):

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:behavior_hideable="false"
    app:behavior_peekHeight="60dp"
    app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
    android:background="@drawable/rounded_bottom_sheet"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <TextView
        android:id="@+id/heading"
        android:paddingStart="4dp"
        android:paddingTop="8dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Image Processing"
        android:textStyle="bold"
        android:textSize="32sp"
        android:textColor="@color/black"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"/>
    <View
        app:layout_constraintStart_toStartOf="parent"
        android:layout_marginTop="16dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@id/heading"
        app:layout_constraintBottom_toTopOf="@id/object_size"
        style="@style/Divider.Horizontal"/>
    <TextView
        android:id="@+id/object_size"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingStart="4dp"
        android:paddingTop="8dp"
        app:layout_constraintTop_toBottomOf="@id/heading"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintBottom_toTopOf="@id/length"
        android:text="Actual Object Parameters"
        android:textStyle="bold"
        android:textSize="24sp"
        android:textColor="@color/black"/>
    <LinearLayout
        android:id="@+id/length"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@id/object_size"
        app:layout_constraintStart_toStartOf="parent"
        android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingStart="4dp"
            android:paddingEnd="16dp"
            android:paddingTop="8dp"
            android:text="Object Length"
            android:textSize="18sp"
            android:textColor="@color/black"/>
        <EditText
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:inputType="number"
            android:maxLines="1"
            android:maxLength="2"
            android:hint="5" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingStart="4dp"
            android:paddingEnd="16dp"
            android:paddingTop="8dp"
            android:text="Inches"
            android:textSize="18sp"
            android:textColor="@color/black"/>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/width"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@id/length"
        app:layout_constraintStart_toStartOf="parent"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/object_width"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingStart="4dp"
            android:paddingEnd="16dp"
            android:paddingTop="8dp"
            android:text="Object Width"
            android:textSize="18sp"
            android:textColor="@color/black"/>
        <EditText
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:inputType="number"
            android:maxLines="1"
            android:maxLength="2"
            android:hint="8"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingStart="4dp"
            android:paddingEnd="16dp"
            android:paddingTop="8dp"
            android:text="Inches"
            android:textSize="18sp"
            android:textColor="@color/black"/>
    </LinearLayout>
    <Button
        android:id="@+id/save_button"
        app:layout_constraintTop_toBottomOf="@id/width"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginTop="12dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Save"/>
    <View
        app:layout_constraintStart_toStartOf="parent"
        android:layout_marginTop="16dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@id/save_button"
        app:layout_constraintBottom_toTopOf="@id/object_recognition"
        style="@style/Divider.Horizontal"/>
    <TextView
        android:id="@+id/object_recognition"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingStart="4dp"
        android:paddingTop="8dp"

        app:layout_constraintTop_toBottomOf="@id/save_button"
        app:layout_constraintStart_toStartOf="parent"
        android:text="Image Metrics"
        android:textStyle="bold"
        android:textSize="24sp"
        android:textColor="@color/black"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/object_recognition"
        app:layout_constraintEnd_toEndOf="parent">
        <TextView
            android:id="@+id/top"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="top"
            />
    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

ImageAnalysisBottomSheet ()

package com.example.cyfi.picture_tab;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProviders;

import com.example.cyfi.R;
import com.google.android.material.bottomsheet.BottomSheetBehavior;

public class ImageAnalysisBottomSheet extends Fragment {
    private ApImageViewModel apImageViewModel;
    private BottomSheetBehavior sheetBehavior;
    private TextView top;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        apImageViewModel = ViewModelProviders.of(getActivity()).get(ApImageViewModel.class);
        apImageViewModel.getBottom().observe(this, this::bottomEdge);
        apImageViewModel.getTop().observe(this, this::topEdge);
        apImageViewModel.getLeft().observe(this, this::leftEdge);
        apImageViewModel.getRight().observe(this, this::rightEdge);
    }

    private void rightEdge(Float right) {
    }

    private void leftEdge(Float left) {
    }

    private void topEdge(Float top) {
        this.top.setText(top.toString());
    }

    private void bottomEdge(Float bottom) {
        //do something with it
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.image_analysis, container, false);
        top = view.findViewById(R.id.top);
        sheetBehavior = BottomSheetBehavior.from(view);
        sheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
        sheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
            @Override
            public void onStateChanged(@NonNull View bottomSheet, int newState) {
                switch (newState) {
                    case BottomSheetBehavior.STATE_HIDDEN:
                        break;
                    case BottomSheetBehavior.STATE_EXPANDED: {

                    }
                    break;
                    case BottomSheetBehavior.STATE_COLLAPSED: {

                    }
                    break;
                    case BottomSheetBehavior.STATE_DRAGGING:
                        break;
                    case BottomSheetBehavior.STATE_SETTLING:
                        break;
                }
            }

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

            }
        });
        return view;
    }
}

1 Ответ

0 голосов
/ 03 ноября 2019

попробуйте добавить макет координатора как родительский

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <com.example.cyfi.picture_tab.DrawImageView
        android:id="@+id/image_preview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:contentDescription="ap_picture" />

    <TextView
        android:id="@+id/image_instructions"
        android:paddingStart="20dp"
        android:paddingEnd="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="visible"
        android:fontFamily="sans-serif-black"
        android:textSize="28sp"
        android:text="Click the camera icon below to take a picture of the access point. Ensure that you are taking an extremely clear picture with direct line of sight. "
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/take_picture_button"
        android:visibility="visible"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:src="@drawable/ic_photo_camera_black_24dp"
        app:backgroundTint="@color/silver"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintBottom_toBottomOf="parent" />

        <View
            android:id="@+id/shadow"
            android:layout_width="match_parent"
            android:layout_height="16dp"
            android:background="@drawable/shadow_gradient"
            app:layout_anchor="@id/bottom_sheet" />
        <include
            android:id="@+id/bottom_sheet"
            android:visibility="visible"
            layout="@layout/image_analysis"/>

</androidx.coordinatorlayout.widget.CoordinatorLayout>
...