Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Ma3stro
0 / 0 / 0
Регистрация: 23.11.2015
Сообщений: 24
1

FindViewById() возращает null

25.12.2018, 20:39. Просмотров 295. Ответов 5

Добрый день!
Воспроизвожу код из книги Head First Android. При получении элементов при помощи метода findViewById() метод возращает null (соответственно затем NPE). Прошу помощи!

Активность:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class BearAdvisorActivity extends Activity {
 
    // Вспомогательный класс, не обращайте внимание!
    private BeerExpert beerExpert = new BeerExpert();
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bear_advisor);
    }
 
    public void onClickFindBeer(View view) {
        // Выпадающее окно
        Spinner types = view.findViewById(R.id.beer_type);
 
        // Достаем текущий тип
        String type = String.valueOf(types.getSelectedItem());
 
        // Ссылка на текст
        TextView text = view.findViewById(R.id.brands);
 
        // Добавляем элементы на TextView
        List<String> brands = beerExpert.getBrands(type);
        StringBuilder brandsFormatted = new StringBuilder();
        for (String brand : brands) {
            brandsFormatted.append(brand).append("\n");
        }
        text.setText(brandsFormatted);
    }
}
Макет:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    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:orientation="vertical"
    android:padding="16dp"
    tools:context=".BearAdvisorActivity">
 
    <Spinner
        android:id="@+id/beer_type"
        android:entries="@array/beer_types"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:layout_gravity="center"
        android:layout_margin="16dp" />
 
    <Button
        android:id="@+id/button"
        android:text="@string/beer_find"
        android:onClick="onClickFindBeer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="16dp" />
 
    <TextView
        android:id="@+id/brands"
        android:text="@string/brands"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="16dp" />
 
</LinearLayout>
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2018, 20:39
Ответы с готовыми решениями:

FindViewByID возвращает Null
День добрый. Я в разработке андроида новичек, и застрял можно сказать в самом начале. Имеется...

RelativeLayout findViewById return null
Я что-то не пойму никак.. почему RelativeLayout возвращает не ссылку на TextView, а null? ...

FindViewByID возвращает Null производного класса View
Возвращает null в v, что может быть. если использовать родной SurfaceView все ОК. Кнопку находит....

Чтение данных из БД firebase всегда возращает null
Добрый вечер! Пишу игру для ОС Android. Возникла проблема с чтением данных из БД при первом входе...

FindViewById
Назрел вопрос, почему в MainActivity мы пишем, например, ListView lvMain = (ListView)...

5
ILNAR_93
Android
243 / 240 / 52
Регистрация: 19.01.2013
Сообщений: 1,895
Записей в блоге: 3
25.12.2018, 21:08 2
Не думаю что в книги допустили бы такую ошибку.


onClickFindBeer(View view) - view здесь тот элемент на который кликнули. Судя по разметке это button
1
jaman_smk
104 / 84 / 27
Регистрация: 07.01.2017
Сообщений: 447
25.12.2018, 21:11 3
Должно быть
Java
1
Spinner types = findViewById(R.id.beer_type);
и
Java
1
TextView text = findViewById(R.id.brands);
, так как они не в кнопке находится.
1
Ma3stro
0 / 0 / 0
Регистрация: 23.11.2015
Сообщений: 24
25.12.2018, 21:13  [ТС] 4
Копировал код в точности, как из книги.
Подскажите, пожалуйста, как в моем случае достать элементы из моей разметки по id (Spinner и TextView) в методе onClickFindBeer?
0
jaman_smk
104 / 84 / 27
Регистрация: 07.01.2017
Сообщений: 447
25.12.2018, 21:16 5
Ma3stro, в Activity просто по findViewById брать.
0
Ma3stro
0 / 0 / 0
Регистрация: 23.11.2015
Сообщений: 24
25.12.2018, 21:23  [ТС] 6
Всё заработало, благодарю!
0
25.12.2018, 21:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2018, 21:23

findViewById и Fragment
Пытаюсь использовать getView().findViewById Но не работает

Инициализация view элементов findViewById
Здравствуйте. такой вопрос постоянно приходится в методах указывать findViewById на используемые...

Какую роль выполняет findViewById в андроиде?
ребята! подскажите пожалуйста, какую роль выполняет findViewById в андроиде? пример VideoView...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru