Android - Снэк-бар не виден во фрагменте / расположении координатора - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь отобразить снэк-бар, но внутри фрагмента он не виден, он может найти расположение координатора, о чем свидетельствует перемещение FAB вверх (см. Скриншоты ниже), но, по-видимому, он отображается за кадром.

В основном, когда добавляется задача, сообщение отправляется обратно в комплекте к фрагменту панели мониторинга, и в этот момент оно будет отображаться.

Имейте в виду, что сообщения «снэк-бар» отображаются одинаково во всем приложении без проблем.

Empty Dashboard No Tasks Found

After task is added, snackbar needs to be displayed

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
<data>
    <variable name="taskViewModel" type="com.pomodorocentral.task.dashboard.TaskViewModel"/>
</data>
<androidx.coordinatorlayout.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/task_coordinator_layout"
        tools:context="com.pomodorocentral.task.dashboard.TaskFragment"
        android:theme="@style/MyTheme.DayNight.NoActionBar"
        android:background="?android:windowBackground"
        android:layout_marginTop="50dp"
        android:layout_marginBottom="50dp">
    <androidx.appcompat.widget.Toolbar
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:theme="@style/ToolBarStyle"
            app:popupTheme="@style/ToolBarStyle.Popup"
            android:id="@+id/task_toolbar"
            android:elevation="4dp"
            app:subtitle="Show Tasks"
            android:layout_marginTop="50dp">
        <com.google.android.material.chip.ChipGroup
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/task_status_filter_group"
                android:visibility="visible"
                app:chipSpacing="4dp"
                android:layout_margin="16dp">
            <com.google.android.material.chip.Chip
                    style="@style/CustomChip"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/active_status_label"
                    android:id="@+id/active_status_chip"
                    app:checkedIconEnabled="true"
                    app:checkedIcon="@drawable/ic_check_white_24dp"
                    app:chipEndPadding="10dp"
                    app:chipStartPadding="10dp"
                    android:includeFontPadding="false"
                    android:elegantTextHeight="false"/>
            <com.google.android.material.chip.Chip
                    style="@style/CustomChip"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/completed_status_label"
                    android:id="@+id/completed_status_chip"
                    app:checkedIconEnabled="true"
                    app:checkedIcon="@drawable/ic_check_white_24dp"
            />
        </com.google.android.material.chip.ChipGroup>
    </androidx.appcompat.widget.Toolbar>
    <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/task_empty_view"
            android:paddingTop="70dp"
            android:paddingBottom="15dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintBottom_toTopOf="@+id/addTaskButton"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            android:paddingLeft="8dp"
            android:paddingRight="8dp"
            app:layout_constraintHorizontal_bias="0.0"
            android:theme="@style/MyTheme.DayNight"
            android:visibility="invisible"
            android:layout_marginTop="50dp">
        <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                tools:layout_editor_absoluteY="30dp"
                tools:layout_editor_absoluteX="121dp"
                android:id="@+id/task_empty_heading"
                tools:text="@string/task_empty_heading" android:textAppearance="@style/TextAppearance.MaterialComponents.Headline5"
                android:gravity="center"
                android:visibility="visible"
                android:text="@string/task_empty_heading"
        />
        <TextView
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:id="@+id/task_empty_text"
                android:textAppearance="@style/TextAppearance.MaterialComponents.Caption"
                tools:text="@string/task_empty_text"
                android:visibility="visible"
                android:text="@string/task_empty_text"
                android:paddingLeft="5dp"
                android:paddingRight="5dp"
                android:gravity="center_vertical|center"/>
        <ImageView
                app:srcCompat="@drawable/ic_pomodoro_shrug"
                android:layout_width="match_parent"
                android:layout_height="340dp"
                android:id="@+id/task_empty_image"
                android:scaleType="fitCenter"
                android:adjustViewBounds="true"
                android:cropToPadding="true"/>
    </LinearLayout>
    <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="100dp">
        <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/task_recycler_view"
                android:scrollbars="vertical"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
        </androidx.recyclerview.widget.RecyclerView>
    </LinearLayout>
    <com.google.android.material.floatingactionbutton.FloatingActionButton
            app:srcCompat="@drawable/ic_add_black_24dp"
            android:layout_width="wrap_content"
            android:layout_height="78dp"
            android:clickable="true"
            android:id="@+id/addTaskButton"
            android:layout_gravity="end|bottom"
            android:focusable="true"
            android:layout_marginBottom="70dp"
            android:layout_marginRight="16dp"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>

Код для отправки сообщения на панель управления

binding.taskViewModel?.task?.value?.let {
    val bundle = Bundle()
    bundle.putParcelable("message", SnackbarMessage(R.string.new_task_save, Snackbar.LENGTH_SHORT))

    if (binding.taskViewModel?.task?.value?.id == null || binding.taskViewModel?.task?.value?.id == 0) {
        binding.taskViewModel?.create(it)
        navigation.navigate(R.id.action_addTaskFragment_to_action_tasks, bundle)
    } else {
        binding.taskViewModel?.update(it)
        navigation.navigate(R.id.action_editTaskFragment_to_action_tasks, bundle)
    }
}

Код для отображения закусочной (onResume)

arguments?.getParcelable<SnackbarMessage>("message")?.let {
    showSnackbar(task_coordinator_layout, it.resourceId, it.duration)
    arguments?.remove("message")
}

Функция расширения, которая вызывается для отображения закусочной

fun Fragment.showSnackbar(view: CoordinatorLayout?, @StringRes resId: Int, 
@Snackbar.Duration duration: Int) {
    view?.let {
        Snackbar.make(it, it.resources.getString(resId), duration).show()
    }
}

Мысли

1 Ответ

0 голосов
/ 04 июля 2019

Я постепенно вносил изменения, добавляя поля в представление рециркулятора (они, вероятно, должны присутствовать независимо), это не имело никакого эффекта.Единственным изменением, которое оказало какое-либо влияние, было обеспечение того, что корневым представлением был макет координатора.

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
    xmlns:app="http://schemas.android.com/apk/res-auto" 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"
    android:id="@+id/task_coordinator_layout"
    tools:context="com.pomodorocentral.task.dashboard.TaskFragment"
    android:theme="@style/MyTheme.DayNight.NoActionBar"
    android:background="?android:windowBackground"
    android:layout_marginTop="50dp"
    android:layout_marginBottom="50dp">
<androidx.appcompat.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:theme="@style/ToolBarStyle"
        app:popupTheme="@style/ToolBarStyle.Popup"
        android:id="@+id/task_toolbar"
        android:elevation="4dp"
        app:subtitle="Show Tasks">
    <com.google.android.material.chip.ChipGroup
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/task_status_filter_group"
            android:visibility="visible"
            app:chipSpacing="4dp"
            android:layout_margin="16dp">
        <com.google.android.material.chip.Chip
                style="@style/CustomChip"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/active_status_label"
                android:id="@+id/active_status_chip"
                app:checkedIconEnabled="true"
                app:checkedIcon="@drawable/ic_check_white_24dp"
                app:chipEndPadding="10dp"
                app:chipStartPadding="10dp"
                android:includeFontPadding="false"
                android:elegantTextHeight="false"/>
        <com.google.android.material.chip.Chip
                style="@style/CustomChip"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/completed_status_label"
                android:id="@+id/completed_status_chip"
                app:checkedIconEnabled="true"
                app:checkedIcon="@drawable/ic_check_white_24dp"
        />
    </com.google.android.material.chip.ChipGroup>
</androidx.appcompat.widget.Toolbar>
<LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/task_empty_view"
        android:paddingTop="70dp"
        android:paddingBottom="15dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toTopOf="@+id/addTaskButton"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        android:paddingLeft="8dp"
        android:paddingRight="8dp"
        app:layout_constraintHorizontal_bias="0.0"
        android:theme="@style/MyTheme.DayNight"
        android:visibility="invisible"
        android:layout_marginTop="50dp">
    <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            tools:layout_editor_absoluteY="30dp"
            tools:layout_editor_absoluteX="121dp"
            android:id="@+id/task_empty_heading"
            tools:text="@string/task_empty_heading"
            android:textAppearance="@style/TextAppearance.MaterialComponents.Headline5"
            android:gravity="center"
            android:visibility="visible"
            android:text="@string/task_empty_heading"
    />
    <TextView
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:id="@+id/task_empty_text"
            android:textAppearance="@style/TextAppearance.MaterialComponents.Caption"
            tools:text="@string/task_empty_text"
            android:visibility="visible"
            android:text="@string/task_empty_text"
            android:paddingLeft="5dp"
            android:paddingRight="5dp"
            android:gravity="center_vertical|center"/>
    <ImageView
            app:srcCompat="@drawable/ic_pomodoro_shrug"
            android:layout_width="match_parent"
            android:layout_height="340dp"
            android:id="@+id/task_empty_image"
            android:scaleType="fitCenter"
            android:adjustViewBounds="true"
            android:cropToPadding="true"/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
        android:layout_marginTop="?attr/actionBarSize"
        android:layout_marginBottom="?attr/actionBarSize"
        android:id="@+id/task_recycler_view"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
<com.google.android.material.floatingactionbutton.FloatingActionButton
        app:srcCompat="@drawable/ic_add_black_24dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:id="@+id/addTaskButton"
        android:layout_gravity="end|bottom"
        android:focusable="true"
        android:layout_margin="16dp"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

После этого все работало как ожидалось.Хотелось бы знать истинную причину, но, честно говоря, я потратил слишком много времени, пытаясь исправить это.В двух словах, исправление удаляло компоновку (привязку данных) из этого представления, что хорошо для этого представления, поскольку привязка данных здесь не использовалась.

...