2012-06-06 4 views
0

나는 내 자신의 어댑터로 확장 가능한 뷰를 가지고 있습니다. 부모 행에는 3 개의 이미지가 보이지 않으며 3 개의 텍스트 뷰가 있습니다.expandablelistview에서 부모를 위해 이미지를 표시합니다.

활동 중에는 데이터가있는 String [] []이 있습니다. 데이터에 따라 이미지를 표시하도록 설정하고 싶습니다.

@Override 
    public View getGroupView(int groupPosition, boolean isExpanded, 
      View convertView, ViewGroup parentView) { 
     View v; 
     if (convertView == null) { 
      v = newGroupView(isExpanded, parentView); 
     } else { 
      v = convertView; 
     } 
     ponIconos(); 
     return v; 
    } 

    private void ponIconos() { 

     ImageView drCandado = (ImageView) findViewById(R.id.icono_candado); 
     ImageView drOjos = (ImageView) findViewById(R.id.icono_ojo); 
     ImageView drUrgente = (ImageView) findViewById(R.id.icono_urgente); 

     for(int i =0; i<ArrayServicios.size();i++){ 
      if (sIconos[i][0] != "null") 
       drUrgente.setVisibility(View.VISIBLE); 
      if (sIconos[i][1] != "null") 
       drCandado.setVisibility(View.VISIBLE); 
      if (sIconos[i][2] != "null") 
       drOjos.setVisibility(View.VISIBLE);  
     } 
    } 

을하지만 nullpo .. 로그 캣 충돌 :

임 노력을 수행하는

06-06 08:44:01.066: E/AndroidRuntime(879): FATAL EXCEPTION: main 
06-06 08:44:01.066: E/AndroidRuntime(879): java.lang.NullPointerException 
06-06 08:44:01.066: E/AndroidRuntime(879): at com.reparalia.movilidad.ListadoServicios$adaptadorLista.ponIconos(ListadoServicios.java:532) 
06-06 08:44:01.066: E/AndroidRuntime(879): at com.reparalia.movilidad.ListadoServicios$adaptadorLista.getGroupView(ListadoServicios.java:520) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.widget.ExpandableListConnector.getView(ExpandableListConnector.java:445) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.widget.AbsListView.obtainView(AbsListView.java:2033) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.widget.ListView.makeAndAddView(ListView.java:1772) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.widget.ListView.fillDown(ListView.java:672) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.widget.ListView.fillFromTop(ListView.java:732) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.widget.ListView.layoutChildren(ListView.java:1625) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.widget.AbsListView.onLayout(AbsListView.java:1863) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.view.View.layout(View.java:11278) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.view.ViewGroup.layout(ViewGroup.java:4224) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1617) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.widget.LinearLayout.onLayout(LinearLayout.java:1401) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.view.View.layout(View.java:11278) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.view.ViewGroup.layout(ViewGroup.java:4224) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.widget.FrameLayout.onLayout(FrameLayout.java:431) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.widget.ScrollView.onLayout(ScrollView.java:1405) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.view.View.layout(View.java:11278) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.view.ViewGroup.layout(ViewGroup.java:4224) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:925) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.view.View.layout(View.java:11278) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.view.ViewGroup.layout(ViewGroup.java:4224) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.widget.FrameLayout.onLayout(FrameLayout.java:431) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.view.View.layout(View.java:11278) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.view.ViewGroup.layout(ViewGroup.java:4224) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.widget.LinearLayout.onLayout(LinearLayout.java:1399) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.view.View.layout(View.java:11278) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.view.ViewGroup.layout(ViewGroup.java:4224) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.widget.FrameLayout.onLayout(FrameLayout.java:431) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.view.View.layout(View.java:11278) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.view.ViewGroup.layout(ViewGroup.java:4224) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1489) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.os.Looper.loop(Looper.java:137) 
06-06 08:44:01.066: E/AndroidRuntime(879): at android.app.ActivityThread.main(ActivityThread.java:4424) 
06-06 08:44:01.066: E/AndroidRuntime(879): at java.lang.reflect.Method.invokeNative(Native Method) 
06-06 08:44:01.066: E/AndroidRuntime(879): at java.lang.reflect.Method.invoke(Method.java:511) 
06-06 08:44:01.066: E/AndroidRuntime(879): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
06-06 08:44:01.066: E/AndroidRuntime(879): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
06-06 08:44:01.066: E/AndroidRuntime(879): at dalvik.system.NativeStart.main(Native Method) 

다른 방법을?

솔루션

/************************************************************************/ 
     /********************* Metodo que GENERA LA VISTA DE LOS PADRES ****************/ 
     @Override 
     public View getGroupView(final int groupPosition, 
       final boolean isExpanded, final View convertView, 
       final ViewGroup parent) { 
      View v; 
      if (convertView == null) { 
       v = newGroupView(isExpanded, parent); 
      } else **{ 
       v = convertView; 
      } 
      llenaPadre(v, padreDesde.get(groupPosition), padreDesde, 
        padreHasta, groupPosition); 
      return v; 
     } 
     /********************* Metodo que rellena las filas padres ****************/ 
     private void llenaPadre(View v, Map<String, ?> map, 
       List<? extends Map<String, ?>> datosPadres, int[] padreHasta2, 
       int groupPosition) { 
      ImageView drCandado = (ImageView) v 
        .findViewById(R.id.icono_candado); 
      ImageView drOjos = (ImageView) v.findViewById(R.id.icono_ojo); 
      ImageView drUrgente = (ImageView) v 
        .findViewById(R.id.icono_urgente); 
      int len = padreHasta2.length - 1; 
      for (int i = 0; i < len; i++) { 
       TextView tv = (TextView) v.findViewById(padreHasta2[i]); 
       if (v != null) { 
        String texto = (String) map.get(cabecerasPadres[i]); 
        tv.setText(texto); 
        if (sIconos[0][groupPosition] != null) 
         if (drUrgente != null) 
          drUrgente.setVisibility(View.VISIBLE); 
        if (sIconos[1][groupPosition] != null) 
         if (drCandado != null) 
          drCandado.setVisibility(View.VISIBLE); 
        if (sIconos[2][groupPosition] != null) 
         if (drOjos != null) 
          drOjos.setVisibility(View.VISIBLE); 
       } 
      }** 
     } 
+0

logcat을 표시 할 수 있습니까? –

+0

나는 logcat – rbrlnx

답변

0

난 당신이 여기에 뷰 참조를 누락, 문제라고 생각합니다. ID로 찾기 뷰를 수행 할 때 어댑터 내에서 사용자가 팽창시킨 뷰를 기준으로 항목을 참조해야합니다. 귀하의 경우에는 "convertView". 이렇게 해보고, ponIcons()를 통해 convertView objetc를 전달하고 거기에서 위젯을 참조하십시오.

@Override 
    public View getGroupView(int groupPosition, boolean isExpanded, 
      View convertView, ViewGroup parentView) { 
     View v; 
     if (convertView == null) { 
      v = newGroupView(isExpanded, parentView); 
     } else { 
      v = convertView; 
     } 
     ponIconos(convertView); 
     return v; 
    } 

    private void ponIconos(View convertView) { 

     ImageView drCandado = (ImageView)convertView.findViewById(R.id.icono_candado); 
     ImageView drOjos = (ImageView)convertView. findViewById(R.id.icono_ojo); 
     ImageView drUrgente = (ImageView)convertView. findViewById(R.id.icono_urgente); 

     for(int i =0; i<ArrayServicios.size();i++){ 
      if (sIconos[i][0] != "null") 
       if(drUrgente!=null) 
       drUrgente.setVisibility(View.VISIBLE); 
      if (sIconos[i][1] != "null") 
       if(drCandado!=null) 
       drCandado.setVisibility(View.VISIBLE); 
      if (sIconos[i][2] != "null") 
       if(drOjos!=null) 
       drOjos.setVisibility(View.VISIBLE);  
     } 
    } 
+0

와 내 질문을 편집, 동일한 줄에 너무 null 반환 – rbrlnx

+0

그 라인을 코멘트로 게시 할 수 있습니까? –

+0

drUrgente.setVisibility (View.VISIBLE); 이 줄에서 충돌이 발생했습니다. – rbrlnx

관련 문제