Кнопка «Настроить изображение» в заголовке ящика навигации [дубликат]

Вы можете использовать словарь:

x = 0
y = 1
z = 3
list=[]
dict = {0: 'c', 1: 'd', 2: 'e', 3: 'f'}
if x in dict:
    list.append(dict[x])
else:
    pass

if y in dict:
    list.append(dict[y])
else:
    pass
if z in dict:
    list.append(dict[z])
else:
    pass

print list
137
задан Gabriele Mariotti 20 October 2015 в 06:30
поделиться

4 ответа

Версия 23.1.0 переключает NavigationView на использование RecyclerView (вместо предыдущего ListView), и заголовок добавляется как один из этих элементов. Это означает, что не всегда доступно для вызова findViewById() - требуется передать макет перед его присоединением к NavigationView.

Для версии 23.1.1 поддержки Library, теперь вы можете получить ссылку на представление заголовка с помощью getHeaderView():

View headerLayout = navigationView.getHeaderView(0); // 0-index header

. Это имеет преимущество в работе над заголовками, добавленными через XML и через код.

Если вы по-прежнему используете 23.1.0, в соответствии с связанной ошибкой , вы можете раздуть заголовок в коде и использовать findViewById() на этом:

View headerLayout = 
    navigationView.inflateHeaderView(R.layout.navigation_header);
panel = headerLayout.findViewById(R.id.viewId);
// panel won't be null

Пока вы не перейдете на 23.1.1.

372
ответ дан ianhanniballake 25 August 2018 в 18:37
поделиться

Теперь с выпуском библиотеки поддержки дизайна 23.1.1 вы можете использовать

NavigationView navigationView = (NavigationView) findViewById(R.id.your_nav_view_id);
View header = navigationView.getHeaderView(0)
TextView text = (TextView) header.findViewById(R.id.textView);
116
ответ дан cricket_007 25 August 2018 в 18:37
поделиться

Для меня это была та же ситуация с 23.1.0, после обновления становится исключение null-указателя. В этом случае NavigatorView выглядит так:

<android.support.design.widget.NavigationView
  android:id="@+id/navigation_view"
  android:layout_height="match_parent"
  android:layout_width="wrap_content"
  android:layout_gravity="start"
  android:fitsSystemWindows="true"
  app:headerLayout="@layout/nav_header"
  app:menu="@menu/menu_nav"/>

Я попробовал предложение по решению ianhanniballake, но он не работает. Затем я завысил предложение:

LayoutInflater.from(getContext()).inflate(R.layout.nav_header, mNavigationView);

После этого я могу найти по id все виды, определенные в макете nav_heard.

7
ответ дан Javier C. 25 August 2018 в 18:37
поделиться

Так я сделал это с помощью ButterKnife, и он работает для меня.

protected static class HeaderViewHolder {

    @BindView(R.id.button)
    Button button;

    HeaderViewHolder(View view) {
        ButterKnife.bind(this, view);
    }
}

, а затем используйте этот держатель вида следующим образом:

View header = navigationView.getHeaderView(0);
headerViewHolder = new HeaderViewHolder(header);
9
ответ дан Wahib Ul Haq 25 August 2018 в 18:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: