我對ExpandableListViews
和CheckBoxes
有個簡單的問題。我將在下面顯示當前的代碼。我目前有一個ExpandableListView
與每個子行中的複選框。Android ExpandableListView CheckBox只選Clicked複選框
這些checkboxes
可以選擇,但問題是我有我的ExpandableListView
許多孩子。所以問題是,當我檢查框時,它顯示選擇了多個複選框。因此,如果我檢查第一個孩子複選框,它也顯示第6或第7個孩子也被選中。
package com.WebGems.MW3CustomClasses;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ImageView;
import android.widget.SimpleExpandableListAdapter;
import android.widget.TextView;
public class PrimaryWeapon extends Activity {
ExpandableListView listPrimaryWeapon;
//Strike Package ArrayLists
ArrayList assaultPackage = new ArrayList();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.primary_weapon);
listPrimaryWeapon = (ExpandableListView)findViewById(R.id.listView1);
Bundle extras = getIntent().getExtras();
String type = extras.getString("type");
if(type.equals("assault")) {
showAssaultPackageList();
}
}
private void showAssaultPackageList() {
// TODO Auto-generated method stub
assaultPackage.add("UAV");
assaultPackage.add("CARE PACKAGE");
assaultPackage.add("I.M.S.");
assaultPackage.add("PREDATOR MISSILE");
assaultPackage.add("SENTRY GUN");
assaultPackage.add("PRECISION AIRSTRIKE");
assaultPackage.add("ATTACK HELICOPTER");
assaultPackage.add("STRAFE RUN");
assaultPackage.add("AH-6 OVERWATCH");
assaultPackage.add("REAPER");
assaultPackage.add("ASSAULT DRONE");
assaultPackage.add("AC-130");
assaultPackage.add("PAVE LOW");
assaultPackage.add("JUGGERNAUT");
assaultPackage.add("OSPREY GUNNER");
// Construct Expandable List
final String NAME = "name";
final String IMAGE = "image";
final String DATA = "data";
final String NUMBER = "number";
final LayoutInflater layoutInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final ArrayList<HashMap<String, String>> headerData = new ArrayList<HashMap<String, String>>();
final HashMap<String, String> group1 = new HashMap<String, String>();
group1.put(NAME, "Assault Package");
headerData.add(group1);
final ArrayList<ArrayList<HashMap<String, Object>>> childData = new ArrayList<ArrayList<HashMap<String, Object>>>();
final ArrayList<HashMap<String, Object>> group1data = new ArrayList<HashMap<String, Object>>();
childData.add(group1data);
int assaultPackageCounter = 0;
for(int arm = 0; arm < assaultPackage.size(); ++arm) {
final HashMap<String, Object> assaultPackageMap = new HashMap<String, Object>();
assaultPackageMap.put(NAME, assaultPackage.get(arm));
if(assaultPackageCounter == 0) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.uav));
assaultPackageMap.put(DATA, "UAV DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.three));
}
if(assaultPackageCounter == 1) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.carepackage));
assaultPackageMap.put(DATA, "CARE PACKAGE DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.four));
}
if(assaultPackageCounter == 2) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.ims));
assaultPackageMap.put(DATA, "IMS DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.five));
}
if(assaultPackageCounter == 3) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.predatormissile));
assaultPackageMap.put(DATA, "PREDATOR MISSILE DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.five));
}
if(assaultPackageCounter == 4) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.sentrygun));
assaultPackageMap.put(DATA, "SENTRY GUN DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.five));
}
if(assaultPackageCounter == 5) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.precisionairstrike));
assaultPackageMap.put(DATA, "PRECISION AIRSTRIKE DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.six));
}
if(assaultPackageCounter == 6) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.attackhelicopter));
assaultPackageMap.put(DATA, "ATTACK HELICOPTER DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.seven));
}
if(assaultPackageCounter == 7) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.straferun));
assaultPackageMap.put(DATA, "STRAFE RUN DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.nine));
}
if(assaultPackageCounter == 8) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.ahsixoverwatch));
assaultPackageMap.put(DATA, "AH-6 OVERWATCH DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.nine));
}
if(assaultPackageCounter == 9) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.reaper));
assaultPackageMap.put(DATA, "REAPER DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.nine));
}
if(assaultPackageCounter == 10) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.assaultdrone));
assaultPackageMap.put(DATA, "ASSAULT DRONE DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.ten));
}
if(assaultPackageCounter == 11) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.aconethreezero));
assaultPackageMap.put(DATA, "AC-130 DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.twelve));
}
if(assaultPackageCounter == 12) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.pavelow));
assaultPackageMap.put(DATA, "PAVE LOW DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.twelve));
}
if(assaultPackageCounter == 13) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.juggernaut));
assaultPackageMap.put(DATA, "JUGGERNAUT DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.fifteen));
}
if(assaultPackageCounter == 14) {
assaultPackageMap.put(IMAGE, getResources().getDrawable(R.drawable.ospreygunner));
assaultPackageMap.put(DATA, "OSPREY GUNNER DESCRIPTION");
assaultPackageMap.put(NUMBER, getResources().getDrawable(R.drawable.seventeen));
}
assaultPackageCounter++;
group1data.add(assaultPackageMap);
}
assaultPackageCounter = 0;
// Set up some sample data in both groups
/*for(int i=0; i<10; ++i) {
final HashMap<String, Object> map = new HashMap<String,Object>();
map.put(NAME, "Child " + i);
//map.put(DATA, "Data " + i);
map.put(IMAGE, getResources().getDrawable((i%3==0? R.drawable.arrowright : R.drawable.arrowdown)));
(i%2==0 ? group1data : group2data).add(map);
}*/
listPrimaryWeapon.setAdapter(new SimpleExpandableListAdapter(
this,
headerData,
R.layout.group_row,
new String[] { NAME, DATA }, // the names of the data
new int[] { R.id.groupname }, // the text field to populate with the field data
childData,
0,
null,
new int[] {}
) {
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
final View v = super.getChildView(groupPosition, childPosition, isLastChild, convertView, parent);
// Populate your custom view here
((TextView)v.findViewById(R.id.name)).setText((String) ((Map<String,Object>)getChild(groupPosition, childPosition)).get(NAME));
((TextView)v.findViewById(R.id.textView1)).setText((String) ((Map<String,Object>)getChild(groupPosition, childPosition)).get(DATA));
((ImageView)v.findViewById(R.id.image)).setImageDrawable((Drawable) ((Map<String,Object>)getChild(groupPosition, childPosition)).get(IMAGE));
((ImageView)v.findViewById(R.id.imageView1)).setImageDrawable((Drawable) ((Map<String,Object>)getChild(groupPosition, childPosition)).get(NUMBER));
CheckBox cb = (CheckBox)v.findViewById(R.id.checkBox1);
cb.setClickable(false);
return v;
}
@Override
public View newChildView(boolean isLastChild, ViewGroup parent) {
return layoutInflater.inflate(R.layout.strikepackagelayout, null, false);
}
}
);
ExpandableListView list = (ExpandableListView) findViewById(R.id.listView1);
list.setChoiceMode(ExpandableListView.CHOICE_MODE_MULTIPLE);
list.setOnChildClickListener(new OnChildClickListener(){
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
CheckBox cb = (CheckBox)v.findViewById(R.id.checkBox1);
if(cb != null){
cb.toggle();
}
Log.d("type", "Group: " + groupPosition + ", Child: " + childPosition);
System.out.println("Group:"+groupPosition+", Child: "+childPosition);
return true;
}
});
listPrimaryWeapon.expandGroup(0);
}
}