4

I have a problem with an expandable list that uses the application.

My list, throws me an error when I start to show / hide different groups. Then he throws me an error:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

I dont know why it shows me this error, beacuse if my convertView does not have a holder, then it create new :(

First it uses List_Kategoria file that is used to store category.

Secondly, I have a few lists that represent several layouts. They are entered in the category.

Here are a few methods of Expandable List View.

  @Override
public Object getChild(int groupPosition, int childPosition) {
   ArrayList<Object> lista = catList.get(groupPosition).getItemList();
   Object obj = lista.get(childPosition);
    return obj;
}

@Override
public long getChildId(int groupPosition, int childPosition) {
    ArrayList<Object> lista = catList.get(groupPosition).getItemList();
    Object obj = lista.get(childPosition);
    return obj.hashCode();

}

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {


    ViewHolder holder = null;

    ArrayList<Object> lista = catList.get(groupPosition).getItemList();
    Object obj = lista.get(childPosition);

    if(convertView != null) {
        holder = (ViewHolder) convertView.getTag();
    }

   if (convertView == null || convertView.getTag()==null) {
        holder = new ViewHolder();

        if(obj instanceof List_item_alarm_4 ){
            convertView = inflater.inflate(R.layout.list_item_exp_alarm,null);
        }
        if(obj instanceof List_item_wyswietl_0){
            convertView = inflater.inflate(R.layout.list_item_exp_temp,null);
        }
       if(obj instanceof List_item_tempzad_1){
           convertView = inflater.inflate(R.layout.list_item_exp_temp_zad,null);
       }
       if(obj instanceof List_item_went_wyswietl){
           convertView =  inflater.inflate(R.layout.list_item_exp_went_wyswietl,null);
       }
       if(obj instanceof List_item_went_zad){
           convertView = inflater.inflate(R.layout.list_item_exp_went_zad,null);
       }
        convertView.setTag(holder);
    }



    if(obj instanceof List_item_alarm_4 ) {
        holder.item_alarm = (TextView) convertView.findViewById(R.id.item_alarm);
        holder.item_alarm.setText("asd");
    }
    if(obj instanceof List_item_wyswietl_0){
        holder.item_temp_0_nazwa = (TextView) convertView.findViewById(R.id.item_temp_0_nazwa);
        holder.item_temp_0_wartosc = (TextView) convertView.findViewById(R.id.item_temp_0_wartosc);
        holder.item_temp_0_nazwa.setText("temp");
        holder.item_temp_0_wartosc.setText("XX");
    }
    if(obj instanceof List_item_tempzad_1){
        holder.item_tempzad_1_nazwa = (TextView) convertView.findViewById(R.id.item_tempzad_1_nazwa);
        holder.item_tempzad_1_nazwa.setText("conv");
    }
    if(obj instanceof List_item_went_wyswietl){
        holder.tv_wentRodzaj = (TextView) convertView.findViewById(R.id.tV_went_rodzaj);
        holder.tv_wentPrad = (TextView) convertView.findViewById(R.id.tV_wentPrad);
        holder.tv_wentCzest = (TextView) convertView.findViewById(R.id.tV_wentCzest);

        holder.tv_wentRodzaj.setText("asd");
        holder.tv_wentPrad.setText("asd");
        holder.tv_wentCzest.setText("asd");
    }
    if(obj instanceof List_item_went_zad){
        holder.tV_wentRodzajZad = (TextView) convertView.findViewById(R.id.tV_went_rodzaj_zad);
        holder.eT_went_niski = (EditText) convertView.findViewById(R.id.eT_went_niski);
        holder.eT_went_ekono = (EditText) convertView.findViewById(R.id.eT_went_ekono);
        holder.eT_went_komfort = (EditText) convertView.findViewById(R.id.eT_went_komf);
        holder.tV_wentRodzajZad.setText("NAWIEW");
        holder.eT_went_niski.setText("10");
        holder.eT_went_ekono.setText("10");
        holder.eT_went_komfort.setText("10");
    }

    return convertView;

}

@Override
public int getChildrenCount(int groupPosition) {
    int size = catList.get(groupPosition).getItemList().size();
    return size;
}

Here are method which i use to init Data

private void initData() { catList = new ArrayList();

    List_Kategoria cat1 = createCategory("NAME",0, "R.mipmap/ic_launcher");
    cat1.setItemList(createItemsCat1());
    catList.add(cat1);
    List_Kategoria cat2 = createCategory("NAME",1, "R.mipmap/ic_launcher");
    cat2.setItemList(createItemsCat2());
    catList.add(cat2);

}

private List_Kategoria createCategory(String name, long id, String imgPath) {
    return new List_Kategoria(id, name, imgPath);

}

private ArrayList<Object> createItemsCat1(){

    ArrayList<Object> result = new ArrayList<Object>();

    List_item_wyswietl_0 Dana1= new List_item_wyswietl_0(0, "Dana1", "xx.x");
    List_item_wyswietl_0 Dana2 = new List_item_wyswietl_0(1, "Dana2", "xx.x");
    List_item_tempzad_1 Dana3 = new List_item_tempzad_1(2, "Dana3", "xx.x");

    result.add(Dana1);
    result.add(Dana2);
    result.add(Dana3);
    return result;
}

private ArrayList<Object> createItemsCat2(){

    ArrayList<Object> result = new ArrayList<Object>();

    List_item_wyswietl_0 Dana1 = new List_item_wyswietl_0(0, "Dana1", "xxx");

    result.add(Grzanie);

    return result;
}

I checked again this app, and i have the error if i have 3 group or more, if i have 2 group everything is ok :)

If i have 3 groups with the same List_category that everything is ok :(

If i have groups, which one group has few different list element that i have problem with that Why ??? :(

kamilos207
  • 61
  • 4
  • You aren't filling your holders `View`s. You need to add `holder.someView = convertView.findViewById(R.id.someView)`. – Gent Ahmeti Nov 17 '15 at 12:49

2 Answers2

0

Try this

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {


    ViewHolder holder = null;

    ArrayList<Object> lista = catList.get(groupPosition).getItemList();
    Object obj = lista.get(childPosition);

    if(convertView != null) {
        holder = (ViewHolder) convertView.getTag();
    }



    if (convertView == null || convertView.getTag()==null) {
        holder = new ViewHolder();

        if(obj instanceof List_item_alarm_4 ){
            convertView = inflater.inflate(R.layout.list_item_exp_alarm,null);
            holder.item_alarm = (TextView) convertView.findViewById(R.id.item_alarm);
        }
        if(obj instanceof List_item_wyswietl_0){
            convertView = inflater.inflate(R.layout.list_item_exp_temp,null);
            holder.item_temp_0_nazwa = (TextView) convertView.findViewById(R.id.item_temp_0_nazwa);
            holder.item_temp_0_wartosc = (TextView) convertView.findViewById(R.id.item_temp_0_wartosc);
        }
        if(obj instanceof List_item_tempzad_1){
            convertView = inflater.inflate(R.layout.list_item_exp_temp_zad,null);
            holder.item_tempzad_1_nazwa = (TextView) convertView.findViewById(R.id.item_tempzad_1_nazwa);
        }
        if(obj instanceof List_item_went_wyswietl){
            convertView =  inflater.inflate(R.layout.list_item_exp_went_wyswietl,null);
            holder.tv_wentRodzaj = (TextView) convertView.findViewById(R.id.tV_went_rodzaj);
            holder.tv_wentPrad = (TextView) convertView.findViewById(R.id.tV_wentPrad);
            holder.tv_wentCzest = (TextView) convertView.findViewById(R.id.tV_wentCzest);
        }
        if(obj instanceof List_item_went_zad){
            convertView = inflater.inflate(R.layout.list_item_exp_went_zad,null);
            holder.tV_wentRodzajZad = (TextView) convertView.findViewById(R.id.tV_went_rodzaj_zad);
            holder.eT_went_niski = (EditText) convertView.findViewById(R.id.eT_went_niski);
            holder.eT_went_ekono = (EditText) convertView.findViewById(R.id.eT_went_ekono);
            holder.eT_went_komfort = (EditText) convertView.findViewById(R.id.eT_went_komf);
        }
        convertView.setTag(holder);
    }



    if(obj instanceof List_item_alarm_4 ) {
        holder.item_alarm.setText("asd");
    }
    if(obj instanceof List_item_wyswietl_0){
        holder.item_temp_0_nazwa.setText("temp");
        holder.item_temp_0_wartosc.setText("XX");
    }
    if(obj instanceof List_item_tempzad_1){
        holder.item_tempzad_1_nazwa.setText("conv");
    }
    if(obj instanceof List_item_went_wyswietl){

        holder.tv_wentRodzaj.setText("asd");
        holder.tv_wentPrad.setText("asd");
        holder.tv_wentCzest.setText("asd");
    }
    if(obj instanceof List_item_went_zad){
        holder.tV_wentRodzajZad.setText("NAWIEW");
        holder.eT_went_niski.setText("10");
        holder.eT_went_ekono.setText("10");
        holder.eT_went_komfort.setText("10");
    }

    return convertView;

}
SachinS
  • 2,223
  • 1
  • 15
  • 25
  • It does not work. I have the same error (null pointer exception). When the first (not first but one of them) group is show, then i could not show other beacause i have the error. – kamilos207 Nov 15 '15 at 15:48
  • 1
    @sachinS give some explanation of whatever the code you have given by dont post only code.. explanation is needed – user1140237 Nov 17 '15 at 12:52
  • @user1140237 Sorry for my English . In my code, it is about to to have several groups. Each group contains various items. E.g . Group1 : -child1 ( List_item_1 ) -child2 ( List_item_2 ) Group2 : -child ( List_item_1 ) -child2 ( List_item_2 ) -child3_ ( List_item_3 ) Group3 : -child ( List_item_3 ) Each List_item returns different values ​​(for example name, description, photo , value , etc) . – kamilos207 Nov 17 '15 at 16:57
  • Where did you initialized `inflater` object used for inflating the views – SachinS Nov 18 '15 at 05:27
0

Problem is with context. Do this and get your context assigned during initialization

LayoutInflater infalInflater = (LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_item_exp_alarm,null);
Andrei Herford
  • 17,570
  • 19
  • 91
  • 225
Ashish Rawat
  • 5,541
  • 1
  • 20
  • 17