findViewById () возвращает null - что мне делать? - PullRequest
0 голосов
/ 16 сентября 2018

Я использую bottomSheetBehavior в моем проекте Android. Смотрите коды ниже:

onlineGame.java:

 // get the bottom sheet view
        ConstraintLayout llBottomSheet = findViewById(R.id.end_of_online_game_bottom_sheet_behavior_cl);

// init the bottom sheet behavior
        end_of_online_game_popup = BottomSheetBehavior.from(llBottomSheet);

avtivity_online_game.xml:

.
.
.

    <android.support.design.widget.CoordinatorLayout 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:layout_height="match_parent"
        tools:context="com.androidsample.BottomSheetActivity">

        <!-- include bottom sheet -->
        <include
            android:id="@+id/includeBottomSheetBehavior"
            layout="@layout/test_end_of_online_game_popup" />

    </android.support.design.widget.CoordinatorLayout>
.
.
.

test_end_of_online_game_popup.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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:id="@+id/end_of_online_game_bottom_sheet_behavior_cl"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/cardview_light_background"
    android:visibility="gone"
    app:behavior_hideable="false"
    app:behavior_peekHeight="120dp"
    app:layout_behavior="android.support.design.widget.BottomSheetBehavior">
    .
    .
    .

Проблема в этой строке:

ConstraintLayout llBottomSheet = findViewById(R.id.end_of_online_game_bottom_sheet_behavior_cl);

возвращает ноль. Я даже изменил кодовое место на onResume, но это не сработало. Когда я получаю другой элемент в test_end_of_online_game_popup, он работает хорошо, а не ноль.

В чем проблема?

Тпй

Ответы [ 3 ]

0 голосов
/ 16 сентября 2018

Два варианта:

  1. ConstraintLayout llBottomSheet = findViewById(R.id. includeBottomSheetBehavior);

  2. <include layout="@layout/test_end_of_online_game_popup" />

0 голосов
/ 16 сентября 2018

Попробуйте это:

View view = findViewById(R.id.includeBottomSheetBehavior);//firstly get the root view ID
ConstraintLayout llBottomSheet = view.findViewById(R.id.end_of_online_game_bottom_sheet_behavior_cl);
0 голосов
/ 16 сентября 2018

Поскольку вы используете включенные макеты:

Используйте представление поиска по идентификатору, который вы дали для тега включения

findViewById(R.id.includeBottomSheetBehavior)

Или вы можете опустить идентификатор в теге макета, чтобычто он не переопределен.

В теге требуется только атрибут макета.Этот атрибут является ссылкой на файл макета, который вы хотите включить.Этот тег также позволяет переопределить несколько атрибутов включенного макета.

Приведенный выше пример показывает, что вы можете использовать android: id, чтобы указать идентификатор корневого представления включенного макета; также переопределит идентификатор включенного макета, если он определен .Точно так же вы можете переопределить все параметры макета.

Источник: http://www.curious -creature.com / 2009/02/25 / android-layout-trick-2-include-to-reuse /

...