2013-10-08 3 views
0

У меня есть один текст с visibility=gone, и если некоторые условия верны, я хочу установить его на setVisibility(View.VISIBLE).java.lang.nullpointer исключение, даже если я instancied textview

Этот виджет находится внутри макета list_item, который, в свою очередь, внутри списка.

Вот мой Java-код, чтобы установить его, чтобы быть видимым:

if(sex_affiche && favori_affiche){ 
     mSchedule = new SimpleAdapter(this.getBaseContext(), 
       listItem, R.layout.affichage_item_listview, new String[] { 
         "nom", "tel","sex","favori" }, new int[] { R.id.item_nom, 
         R.id.item_tel, R.id.item_sex_jdida, R.id.item_favori }); 

     listedescontacts.setAdapter(mSchedule); 
     registerForContextMenu(listedescontacts); 

     if(sex == null){ 
      Log.d("null", "yes"); 
      TextView sex2 = (TextView)findViewById(R.id.item_sex_jdida); 
      if(sex2 == null) 
      Log.d("still null", "yes"); 
      else 
       sex2.setVisibility(View.VISIBLE); 
     } 


     //favori.setVisibility(View.VISIBLE); 

    } 

Я инстанциирован его в oncreate, и я заново в этом методе, но это всегда нуль.

+0

Проверьте текущий XML активность оказывает TextView с ** "@ + ид/item_sex_jdida "** id или нет? –

+0

yes У меня есть, если нет, у меня будет ошибка – begiPass

+0

@begiPass у вас она есть в 'R.layout.affichage_item_listview' не в вашем макете активности, поэтому вы получаете NPE – Raghunandan

ответ

4

Текстовое представление, которое вы пытаетесь получить, находится в списке; поэтому вы не можете иметь прямой доступ к ним. Что вы можете сделать, это переопределить getView() от адаптера, так и внутри него получить вид и сделать его видимым (слепое кодирование):

mSchedule = new SimpleAdapter(this.getBaseContext(), 
      listItem, R.layout.affichage_item_listview, new String[] { 
     "nom", "tel","sex","favori" }, new int[] { R.id.item_nom, 
     R.id.item_tel, R.id.item_sex_jdida, R.id.item_favori) { 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View superView = super.getView(position, convertView, parent); 
      TextView sex2 = (TextView)superView.findViewById(R.id.item_sex_jdida); 
      if(some_condition) { 
       sex2.setVisibility(View.VISIBLE); 
      } else { 
       sex2.setVisibility(View.GONE); 
      } 
      return superView; 
     } 
    }; 
+0

спасибо, это все, что мне нужно – begiPass

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