Nya*_*nLH 10 checkbox android expandablelistview
朋友们,
我正在尝试编写一个在ExpandableListView中使用复选框的应用程序,我在这里遇到了一个问题,即维护应用程序的复选框状态,我从这里得到了示例,我的问题是保持复选框的检查状态,每当我检查其中一个复选框和展开列表,复选框没有它们应该具有的已检查状态.我试图通过添加ArrayList来存储商店的位置并在getChildView()中重新加载位置,但仍然没有达到我想要的目的.这是我的代码
public class ElistCBox extends ExpandableListActivity {
private static final String LOG_TAG = "ElistCBox";
ArrayList<String > chkState = new ArrayList<String>();
static final String colors[] = {"grey","blue","yellow","red"};
static final String shades[][] ={ { "lightgrey","#D3D3D3","dimgray","#696969", "sgi >gray 92","#EAEAEA"},
{ "dodgerblue 2","#1C86EE","steelblue >2","#5CACEE","powderblue","#B0E0E6"},
{ "yellow 1","#FFFF00", "gold 1","#FFD700","darkgoldenrod 1"," #FFB90F" },
{"indianred 1","#FF6A6A", "firebrick 1","#FF3030", "maroon","#800000" } };
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.main);
SimpleExpandableListAdapter expListAdapter = new SimpleExpandableListAdapter(
this,
createGroupList(),
R.layout.group_row, new String[] { "colorName" },
new int[] { R.id.childname }, createChildList(),
R.layout.child_row,
new String[] { "shadeName", "rgb" },
new int[] { R.id.childname, R.id.rgb }
) {
@Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent)
{
final View v = super.getChildView(groupPosition, childPosition, isLastChild, convertView, parent);
final CheckBox chkColor = (CheckBox)v.findViewById(R.id.check1);
if(chkState.contains(groupPosition+","+childPosition)){
chkColor.setChecked(true);
}else{
chkColor.setChecked(false);
}
chkColor.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.e("Checkbox Onclick Listener", Integer.toString(groupPosition) + " - " + Integer.toString(childPosition));
}
});
chkColor.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.e("Checkbox check change Listener", Integer.toString(groupPosition) + " - " + Integer.toString(childPosition));
if(chkColor.isChecked()){
chkState.add(groupPosition+","+childPosition);
} else {
chkState.remove(groupPosition+","+childPosition);
}
}
});
return super.getChildView(groupPosition, childPosition, isLastChild, convertView, parent);
}
};
setListAdapter( expListAdapter );
}
public void onContentChanged () {
super.onContentChanged();
Log.e( LOG_TAG, "onContentChanged" );
}
public boolean onChildClick(
ExpandableListView parent,
View v,
int groupPosition,
int childPosition,
long id) {
Log.e( LOG_TAG, "onChildClick: "+childPosition );
CheckBox cb = (CheckBox)v.findViewById( R.id.check1 );
if( cb != null )
cb.toggle();
return false;
}
public void onGroupExpand (int groupPosition) {
Log.e( LOG_TAG,"onGroupExpand: "+groupPosition );
}
private List createGroupList() {
ArrayList result = new ArrayList();
for( int i = 0 ; i < colors.length ; ++i ) {
HashMap m = new HashMap();
m.put( "colorName",colors[i] );
result.add( m );
}
return (List)result;
}
private List createChildList() {
ArrayList result = new ArrayList();
for( int i = 0 ; i < shades.length ; ++i ) {
ArrayList secList = new ArrayList();
for( int n = 0 ; n < shades[i].length; n += 2 ) {
HashMap child = new HashMap();
child.put( "shadeName", shades[i][n] );
child.put( "rgb", shades[i][n+1] ); secList.add( child );
}
result.add( secList );
}
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
Jia*_*ong 12
这是我对这个问题的回答,你需要为个别孩子保持一个检查状态,并在点击孩子时检查它.经过一番研究,这是由于android的视图生命周期导致视图刷新从而无法保持状态.
public class MyExpandableListAdapter extends BaseExpandableListAdapter {
//Variables
// Sample data set. children[i] contains the children (String[]) for groups[i].
private String[] groups = { "People Names", "Dog Names", "Cat Names", "Fish Names" }; //headers
private String[][] children = {
{ "Arnold", "Barry", "Chuck", "David" },
{ "Ace", "Bandit", "Cha-Cha", "Deuce" },
{ "Fluffy", "Snuggles" },
{ "Goldy", "Bubbles" }
};
private String[] group_vaues = {"PN", "DN", "CN", "FN"};
private String[][] children_values = {
{ "Ar", "Ba", "Ch", "Da" },
{ "Ace", "Ban", "Cha", "Deu" },
{ "Flu", "Snu" },
{ "Gol", "Bub" }
};
ArrayList<ArrayList<Integer>> check_states = new ArrayList<ArrayList<Integer>>();
private Context context;
//Constructors
public MyExpandableListAdapter() {
}
public MyExpandableListAdapter(Context c) {
this.context = c;
}
//Set Methods
public void setGroupsAndValues(String[] g, String[] v) {
this.groups = g;
this.group_vaues = v;
}
public void setChildrenAndValues(String[][] c, String[][] v) {
this.children = c;
this.children_values = v;
//initialize the states to all 0;
for(int i = 0; i < c.length; i++) {
ArrayList<Integer> tmp = new ArrayList<Integer>();
for(int j = 0; j < c[i].length; j++) {
tmp.add(0);
}
check_states.add(tmp);
}
}
//Get Methods
public Object getChild(int groupPosition, int childPosition) {
return children[groupPosition][childPosition];
}
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
public int getChildrenCount(int groupPosition) {
return children[groupPosition].length;
}
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
View grid;
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
grid = inflater.inflate(R.layout.specialty_list_item, parent, false);
final int grpPos = groupPosition;
final int childPos = childPosition;
TextView header = (TextView)grid.findViewById(R.id.title);
header.setText(getChild(groupPosition, childPosition).toString());
final View tick = grid.findViewById(R.id.image);
if(check_states.get(grpPos).get(childPos) == 1)
tick.setVisibility(View.VISIBLE);
else
tick.setVisibility(View.GONE);
grid.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
check_states.get(grpPos).set(childPos, 1);
tick.setVisibility(View.VISIBLE);
}
});
return grid;
}
public Object getGroup(int groupPosition) {
return groups[groupPosition];
}
public int getGroupCount() {
return groups.length;
}
public long getGroupId(int groupPosition) {
return groupPosition;
}
public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
ViewGroup parent) {
View grid;
if(convertView==null){
grid = new View(context);
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
grid = inflater.inflate(R.layout.specialty_header, parent, false);
}else{
grid = (View)convertView;
}
TextView header = (TextView)grid.findViewById(R.id.specialty_header);
header.setText(getGroup(groupPosition).toString());
return grid;
}
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
public boolean hasStableIds() {
return true;
}
Run Code Online (Sandbox Code Playgroud)
}
| 归档时间: |
|
| 查看次数: |
26225 次 |
| 最近记录: |