2016-05-20 1 views
0

Salut, j'utilise l'affichage de la liste extensible dans mon fragment, ici lorsque je suis en cliquant sur la case à cocher dans la liste extensible, je veux obtenir les valeurs à l'activité principale dans le tableau format. Mais l'application plante quand je clique sur checkbox.App s'écraser lors de la sélection case à cocher dans la liste extensible dans Android

ExpandableListAdapter

package com.example.limitscale.beautylog; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import android.content.Context; 
import android.graphics.Typeface; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseExpandableListAdapter; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 
import android.widget.LinearLayout; 
import android.widget.TextView; 
import com.example.limitscale.beautylog.model.BookedInfo; 

public class ExpandableListAdapter extends BaseExpandableListAdapter { 
private Context _context; 
private List<String> _listDataHeader; // header titles 
// child data in format of header title, child title 
private HashMap<String, List<String>> _listDataChild; 
ArrayList<BookedInfo> selectedarray = new ArrayList<BookedInfo>(); 
CheckBox check; 

public ExpandableListAdapter(Context context, List<String> listDataHeader, HashMap<String, List<String>> listChildData) { 
    this._context = context; 
    this._listDataHeader = listDataHeader; 
    this._listDataChild = listChildData; 
} 

@Override 
public Object getChild(int groupPosition, int childPosititon) { 
    return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
      .get(childPosititon); 
} 

@Override 
public long getChildId(int groupPosition, int childPosition) { 
    return childPosition; 
} 

@Override 
public View getChildView(int groupPosition, final int childPosition, 
         boolean isLastChild, View convertView, ViewGroup parent) { 
    final String childText = (String) getChild(groupPosition, childPosition); 
    String valamt[] = childText.split(","); 

    if (convertView == null) { 
     LayoutInflater infalInflater = (LayoutInflater) this._context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.list_item, null); 
    } 

    final LinearLayout content=(LinearLayout) convertView.findViewById(R.id.content); 
    final TextView txtListChild = (TextView) convertView.findViewById(R.id.lblListItem); 
    final TextView price = (TextView) convertView.findViewById(R.id.aMount); 
    check=(CheckBox) convertView.findViewById(R.id.checkBox); 
    txtListChild.setText(valamt[0]); 
    price.setText("Rs" + valamt[1]); 

    check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (isChecked) { 
       BookedInfo bookedInfo = new BookedInfo(); 
       String check = "1"; 
       bookedInfo.setServiceName(txtListChild.toString()); 
       bookedInfo.setmServicePrice(price.toString()); 
       bookedInfo.setmBrandQty(check); 
       selectedarray.add(bookedInfo); 
       ((MainActivity) _context).checked(selectedarray); 
      } 
     } 
    }); 

    return convertView; 
} 

@Override 
public int getChildrenCount(int groupPosition) { 
    return this._listDataChild.get(this._listDataHeader.get(groupPosition)).size(); 
} 

@Override 
public Object getGroup(int groupPosition) { 
    return this._listDataHeader.get(groupPosition); 
} 

@Override 
public int getGroupCount() { 
    return this._listDataHeader.size(); 
} 

@Override 
public long getGroupId(int groupPosition) { 
    return groupPosition; 
} 

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 
    String headerTitle = (String) getGroup(groupPosition); 
    if (convertView == null) { 
     LayoutInflater infalInflater = (LayoutInflater) this._context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.list_group, null); 
    } 

    TextView lblListHeader = (TextView) convertView.findViewById(R.id.lblListHeader); 
    lblListHeader.setTypeface(null, Typeface.BOLD); 
    lblListHeader.setText(headerTitle); 

    return convertView; 
} 

@Override 
public boolean hasStableIds() { 
    return false; 
} 

@Override 
public boolean isChildSelectable(int groupPosition, int childPosition) { 
    return true; 
}} 

ici est mon logcat

05-20 12:27:21.715 30353-30353/com.example.limitscale.beautylog E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.example.limitscale.beautylog, PID: 30353 
java.lang.ClassCastException: android.app.Application cannot be cast to com.example.limitscale.beautylog.MainActivity 
     at com.example.limitscale.beautylog.ExpandableListAdapter$1.onCheckedChanged(ExpandableListAdapter.java:73) 
     at android.widget.CompoundButton.setChecked(CompoundButton.java:127) 
     at android.widget.CompoundButton.toggle(CompoundButton.java:87) 
     at android.widget.CompoundButton.performClick(CompoundButton.java:99) 
     at android.view.View$PerformClick.run(View.java:18491) 
     at android.os.Handler.handleCallback(Handler.java:733) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5336) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:873) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:689) 
     at dalvik.system.NativeStart.main(Native Method) 

En fait, même code a parfaitement fonctionné quand je l'ai testé en tant que projet distinct mais quand je fusionné dans mon application principale du projet est de s'écraser quand je clique sur la case à cocher.

+0

Besoin d'aide pour le fixer, grâce à l'avance –

+0

Pourquoi utiliser '((MainActivity) _context) .checked (selectedarray);' ligne? –

+0

S'il vous plaît dites-moi quel est le problème dans la ligne "((MainActivity) _context) .checked (selectedarray);" –

Répondre

0

Vous instanciation ExpandableListAdapter avec un contexte d'application, t C'est pourquoi vous ne pouvez pas le lancer à une activité (c'est ce que votre erreur dit). Vous devez avoir quelque chose comme new ExpandableListAdapter(getApplicationContext(),...); quelque part. Si vous faites cela sur MainActivity, vous devez modifier cette ligne à new ExpandableListAdapter(MainActivity.this,...);

0

S'il vous plaît définir vous cochez la case dans getView

final CheckBox check=(CheckBox) convertView.findViewById(R.id.checkBox); 

Si vous définissez publiquement que vous obtenez seulement la dernière valeur de case à cocher

+0

droite. Mais il a besoin du tableau des valeurs. Donner la bonne solution si vous connaissez @Jack –

+0

J'ai changé de prise, mais il montre encore une erreur dans la ligne "((MainActivity) _context) .checked (selectedarray);" , son erreur d'obtention passe même la valeur de chaîne aussi. –

+0

@GaneshKrishnamoorthy J'ai une solution mais le principal est que Siva Kumar a dû essayer en premier. –

0

faire suivant une édition en code et faites-moi savoir si cela fonctionne ou non correctement.

public ExpandableListAdapter(Context context, List<String> listDataHeader, HashMap<String, List<String>> listChildData, Activity activity) 
{ 
    this._context = context; 
    this._listDataHeader = listDataHeader; 
    this._listDataChild = listChildData; 
    this.activity = activity; 
} 

et changement de contrôle, modifications ci-dessous

check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     if (isChecked) { 
      BookedInfo bookedInfo = new BookedInfo(); 
      String check = "1"; 
      bookedInfo.setServiceName(txtListChild.toString()); 
      bookedInfo.setmServicePrice(price.toString()); 
      bookedInfo.setmBrandQty(check); 
      selectedarray.add(bookedInfo); 
      ((MainActivity) activity).checked(selectedarray); 
     } 
    } 
}); 
+0

Aucun vicky ne fonctionne pas ..Toujours afficher l'erreur dans la même ligne –

+0

Montrez-moi votre méthode vérifiée dans MainActivity – Vickyexpert

+0

public void checked (ArrayList mArrService) { ((Nouveaux rendez-vous) getSupportFragmentManager(). FindFragmentById (R.id.container)). SelectService (mArrService); } –

0

Moulage à l'activité première:

Activity activity = (Activity) context; 

puis utilisez:

((MainActivity) activity).checked(selectedarray);