2015-04-08 2 views
1

Я пытаюсь инициализировать все кнопки панели навигации и назначать черный цвет фона, когда пользователь нажимает на одну из кнопок, что нужно менять цвет, а все остальные должны оставаться черными. Но я получаю следующее сообщение об ошибке:android java.langNullPointerException Ссылка на нулевой объект

Attempt to invoke virtual method 'android.view.View android.widget.LinearLayout.getChildAt(int)' on a null object reference

public void bottomNavIcons(View view){ 
      for(int i=0;i<Constants.bottom_nav_icon.length;i++) { 

       LinearLayout linearLayout = (LinearLayout) view.findViewById(R.id.bottom_nav_bar); 
       ImageButton imageButton = new ImageButton(getActivity()); 
       imageButton.setClickable(true); 
       imageButton.setOnClickListener(onClickListener); 
       imageButton.setImageResource(Constants.bottom_nav_icon[i]); 
       imageButton.setBackgroundColor(Color.BLACK); 
       imageButton.setPadding(70, 0, 70, 0); 
       LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
       linearLayout.addView(imageButton, layoutParams); 

      } 

     } 
     View.OnClickListener onClickListener = new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        LinearLayout linearLayout = (LinearLayout) v.findViewById(R.id.bottom_nav_bar); 
for(int i=0;i<Constants.bottom_nav_icon.length;i++) { 
        ImageView imageButton = (ImageView) linearLayout.getChildAt(i); 
        imageButton.setBackgroundColor(Color.BLACK); 
     } 
        v.setBackgroundColor(Color.BLUE); 

       } 


      }; 

ответ

3

Я думаю, что это проблема:

LinearLayout linearLayout = (LinearLayout) v.findViewById(R.id.bottom_nav_bar); 

Вы предполагая, что LinearLayout находится внутри вида, который щелкнул - моя догадка это это неверно (вы, вероятно, хотите получить родительский объект с кликом, а не дочерний). У вас есть 2 варианта:

  1. Начало Итерируя иерархии вид на вершину (т.е. называют v.getParent()), пока не достигают LinearLayout.
  2. Вызовите findViewById по содержащейся активности (или корневому виду фрагмента) вместо объекта v.
+0

U были правы !! Спасибо. – digiVader

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