Hi i am using extensible list view in my fragment, here when i am clicking on check box in extensible list view, i want to get the values to Main activity in array format. But app is crashing whenever am clicking on checkbox
.
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;
}}
here is my 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)
Actually same code worked perfectly when i tested it as separate project but when i merged into my main project app is crashing when am clicking on check box.
You are instantiating ExpandableListAdapter
with an application context, that's why you can't cast it to an Activity (That's what your error says). You must have something like new ExpandableListAdapter(getApplicationContext(),...);
somewhere. If you are doing this on MainActivity
, you must change that line to new ExpandableListAdapter(MainActivity.this,...);