Hi,

I am trying to create a custom expandable list where there is a group view
and child view will have a checkboxes.

If i click on group view checkbox then all the child view checkboxes should
checked and vice versa...
Basically I want to implement check all and uncheck all functionality.
I have tried like this but which is not updating properly. Is anybody is
having any idea about this.


I am passing data something like this:
private static final String[][] data =
{{"audia4","audiq7","audir8"},{"bmwm6","bmwx6"},{"ferrarienzo","ferrarif430","ferrarif430italia"}};

package com.test.sample;

import java.util.HashMap;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.text.Html;
import android.util.Log;
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.CompoundButton.OnCheckedChangeListener;
import android.widget.ExpandableListAdapter;

public class SampleExpandableListAdapter extends BaseExpandableListAdapter
implements ExpandableListAdapter {
public Context context;
CheckBox checkBox;
private LayoutInflater vi;
private String[][] data;
int _objInt;
public static Boolean checked[] = new Boolean[1];

HashMap<Long, Boolean> checkboxMap = new HashMap<Long, Boolean>();
HashMap<Integer, Boolean> m_checkboxMap = new HashMap<Integer, Boolean>();
private static final int GROUP_ITEM_RESOURCE = R.layout.group_item;
private static final int CHILD_ITEM_RESOURCE = R.layout.child_item;
public String[] check_string_array;

// Abhi
private int mgroupPos = 0;
private static ViewHolder holder;
static int m_groupPosition = 0;

public SampleExpandableListAdapter(Context context, Activity activity,
String[][] data) {
this.data = data;
this.context = context;
vi = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
_objInt = data.length;
check_string_array = new String[_objInt];
popolaCheckMap();
}

public void popolaCheckMap() {

SharedPreferences settings = PreferenceManager
.getDefaultSharedPreferences(context);
String buffer = null;

for (int i = 0; i < _objInt; i++) {
buffer = settings.getString(String.valueOf((int) i), "false");
if (buffer.equals("false"))
checkboxMap.put((long) i, false);
else
checkboxMap.put((long) i, true);
}
}

public class CheckListener implements OnCheckedChangeListener {
long pos;
int m_pos;

public void setPosition(long p) {
pos = p;
}

@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
Log.i("checkListenerChanged",
String.valueOf(pos) + ":" + String.valueOf(isChecked));
checkboxMap.put(pos, isChecked);
try {
updateCheckbox();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (isChecked == true)
check_string_array[(int) pos] = "true";
else
check_string_array[(int) pos] = "false";
// save checkbox state of each group
 SharedPreferences settings = PreferenceManager
.getDefaultSharedPreferences(context);
SharedPreferences.Editor preferencesEditor = settings.edit();
preferencesEditor.putString(String.valueOf((int) pos),
check_string_array[(int) pos]);
preferencesEditor.commit();
}
}

public String getChild(int groupPosition, int childPosition) {
return data[groupPosition][childPosition];
}

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

public int getChildrenCount(int groupPosition) {
mgroupPos = groupPosition;
return data[groupPosition].length;
}

public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
m_groupPosition = groupPosition;
View v = convertView;
String child = getChild(groupPosition, childPosition);
System.out.println("Abhi getChildView child: " + child);
int id_res = 0;
if (groupPosition == 0) {
if (childPosition == 0)
id_res = R.drawable.audi_a4;
if (childPosition == 1)
id_res = R.drawable.audi_q7;
if (childPosition == 2)
id_res = R.drawable.audi_r8;
} else if (groupPosition == 1) {
if (childPosition == 0)
id_res = R.drawable.bmw_m6;
if (childPosition == 1)
id_res = R.drawable.bmw_x6;
} else if (groupPosition == 2) {
if (childPosition == 0)
id_res = R.drawable.ferrari_enzo;
if (childPosition == 1)
id_res = R.drawable.ferrari_f430;
if (childPosition == 2)
id_res = R.drawable.ferrari_f430_italia;
}

if (child != null) {
v = vi.inflate(CHILD_ITEM_RESOURCE, null);
holder = new ViewHolder(v);
holder.text.setText(Html.fromHtml(child));

holder.imageview.setImageResource(id_res);
// Abhi
CheckListener checkL = new CheckListener();
// checkL.setPosition(group_id);
holder.checkbox.setOnCheckedChangeListener(checkL);
// holder.checkbox.setChecked(checkboxMap.get(group_id));
// Abhi

if(checkboxMap.get((long)groupPosition) == true){
holder.checkbox.setChecked(true);
}else{
holder.checkbox.setChecked(false);
}
}
return v;
}

public String getGroup(int groupPosition) {
return "group-" + groupPosition;
}

public int getGroupCount() {
return data.length;
}

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

public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
View v = convertView;
String group = null;
int id_res = 0;
long group_id = getGroupId(groupPosition);
if (group_id == 0) {
group = "Audi";
id_res = R.drawable.audi;
} else if (group_id == 1) {
group = "BMW";
id_res = R.drawable.bmw;
} else if (group_id == 2) {
group = "Ferrari";
id_res = R.drawable.ferrari;
}

if (group != null) {
v = vi.inflate(GROUP_ITEM_RESOURCE, null);
ViewHolder holder = new ViewHolder(v);

holder.text.setText(Html.fromHtml(group));
holder.imageview.setImageResource(id_res);
holder.checkbox.setFocusable(false);
CheckListener checkL = new CheckListener();
checkL.setPosition(group_id);
holder.checkbox.setOnCheckedChangeListener(checkL);
holder.checkbox.setChecked(checkboxMap.get(group_id));
notifyDataSetChanged();
}
return v;
}

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

public boolean hasStableIds() {
return true;
}
 private void updateCheckbox(){
System.out.println();
if(checkboxMap.get((long)m_groupPosition) == true){
holder.checkbox.setChecked(true);
}else{
holder.checkbox.setChecked(false);
}
}
}

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to android-developers+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Attachment: SampleExpandableAdapter.java
Description: Binary data

Reply via email to