2016-11-28 7 views
1

Я сделал настраиваемый навигационный ящик с тремя кнопками, и я хочу изменить текст на кнопках в соответствии с деятельностью, с которой они связаны. Поэтому, когда я создал объект java макета навигационного ящика с использованием LayoutInflater и получил дескриптор каждой кнопки с помощью findViewById в этом объекте макета, я устанавливаю текст каждой кнопки, но когда я запускаю приложение, текст не отображается (в XML Я не устанавливал текст для кнопок). Отдых все работает нормально.не удалось установитьText кнопки в настраиваемом навигационном ящике

<FrameLayout 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/drawer" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.example.sahil.childcare.NavigationalDrawerFragment"> 

<RelativeLayout 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent"> 
    <include 
      layout="@layout/nav_profile" 
      android:id="@+id/nav_profile" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"/> 
    <Button 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/nav_profile" 
      android:layout_marginLeft="-5dip" 
      android:layout_marginRight="-5dip" 
      android:layout_marginTop="-5dip" 
      android:layout_marginBottom="-5dip" 
      android:id="@+id/top_button" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" /> 
    <Button 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/top_button" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" 
      android:layout_marginLeft="-5dip" 
      android:layout_marginRight="-5dip" 
      android:layout_marginTop="-7dip" 
      android:layout_marginBottom="-5dip" 
      android:id="@+id/middle_button" /> 
    <Button 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/middle_button" 
      android:id="@+id/bottom_button" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" 
      android:layout_marginLeft="-5dip" 
      android:layout_marginRight="-5dip" 
      android:layout_marginTop="-7dip" 
      android:layout_marginBottom="-5dip"/> 
</RelativeLayout> 
</FrameLayout> 

часть кода в основной деятельности (внутри OnCreate метод()) с участием этого ящика здесь

LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
    View view = inflater.inflate(R.layout.fragment_navigational_drawer,null); 
    Button topButton = (Button) view.findViewById(R.id.top_button); 
    Button middleButton = (Button) view.findViewById(R.id.middle_button); 
    Button bottomButton = (Button) view.findViewById(R.id.bottom_button); 
    topButton.setText("School"); 
    topButton.setTextColor(getResources().getColor(R.color.red)); 
    middleButton.setText("Teacher"); 
    middleButton.setTextColor(getResources().getColor(R.color.red)); 
    bottomButton.setText("Child"); 
    bottomButton.setTextColor(getResources().getColor(R.color.red)); 

ответ

1

Первое, что я бы проверить, если кнопки даже видимый на экране. Для этого вы можете установить их некоторый цвет фона, например .:

android:background="#ff0000" 

, а также использовать hierarchy-viewer, чтобы убедиться, что ваши кнопки появляются там, где вы ожидаете их появления.

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

UPDATE:

Для полноты ответа на комментарии ниже, если вы уже добавили раскладку с помощью XML (например, с помощью <include>), вместо того, чтобы надувать его в коде:

View view = inflater.inflate(R.layout.fragment_navigational_drawer,null); 

вам необходимо получить ручку уже раздутого макета, через что-то вроде:

View view = findViewById(R.id.my_navigational_drawer); 
+0

благодарим за усилия. Когда я устанавливаю текст с использованием XML, он появляется. Я думаю, что это другой экземпляр, потому что, когда я устанавливаю «onClickListener» на кнопку, чтобы перейти к соответствующим действиям, этого не происходит (даже журнал показывает это, поскольку я хранил несколько журналов внутри «onClickListener()»). Но как это могло быть раздуйте разные экземпляры. сообщите об этом. – Sahil

+0

опубликуйте код, который использует надутый 'view' – marmor

+1

, вы были правы, было два экземпляра ящика. Я создал один, раздувая фрагмент ящика, и один, добавив фрагмент внутри макета xml. Изменения, которые я сделал, принадлежали раздутому ящику, а не фактическому ящику, появляющемуся в моем приложении. Спасибо за помощь. – Sahil

 Смежные вопросы

  • Нет связанных вопросов^_^