我有一个ExpandableListView声明如下:
<ExpandableListView
android:id="@+id/ListBExpandable"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
我将Child Item布局声明如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="25px"
android:minHeight="25px" >
<CheckBox
android:text="CheckBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/checkBoxBListItem" />
</LinearLayout>
当我检查孩子的复选框并展开或关闭某个组元素时,选中的复选框开始跳入似乎是随机位置。
这是适配器的来源:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
namespace LEX.Droid
{
public class BActivityGroupedAdapter : BaseExpandableListAdapter
{
public static List<BNodeProxy> bNodes = bew List<BNodeProxy>();
public static Dictionary<int, BGroupProxy> bGroups = new Dictionary<int, BGroupProxy>();
Activity context;
List<int> groupKeys;
List<int> filteredGroupKeys;
Dictionary<int,List<int>> filteredItems;
public BActivityGroupedAdapter( Activity context, Dictionary<int,List<int>> filteredItems )
{
this.context = context;
groupKeys = bGroups.Keys.ToList();
this.filteredGroupKeys = filteredGroupKeys;
}
public override Java.Lang.Object GetChild( int groupPosition, int childPosition )
{
int nodeId = filteredItems[ filteredGroupKeys[ groupPosition ] ][ childPosition ];
return bNodes.Where( o => o.id == nodeId ).First().label;
}
public override long GetChildId( int groupPosition, int childPosition )
{
return childPosition;
}
public override int GetChildrenCount( int groupPosition )
{
return filteredItems[ filteredGroupKeys[ groupPosition ] ].Count();
}
public override View GetChildView( int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent )
{
View view;
int nodeId = filteredItems[ filteredGroupKeys[ groupPosition ] ][ childPosition ];
var item = bNodes.Where( o => o.id == nodeId ).First();
if( convertView == null )
{
view = context.LayoutInflater.Inflate( Resource.Layout.ListChildItem, null );
}
else
{
view = convertView;
}
try
{
var checkBoxSelect = view.FindViewById<CheckBox>( Resource.Id.checkBoxListItem );
checkBoxSelect.Text = item.label;
checkBoxSelect.Selected = item.selected;
checkBoxSelect.Tag = item.id;
checkBoxSelect.Click -= theClickEvent;
checkBoxSelect.Click += theClickEvent;
}
catch( Exception ex )
{
}
view.Clickable = false;
view.Focusable = false;
view.FocusableInTouchMode = false;
view.LongClickable = false;
return view;
}
public override Java.Lang.Object GetGroup( int groupPosition )
{
return bGroups[ filteredGroupKeys[ groupPosition ] ].label;
}
public override long GetGroupId( int groupPosition )
{
return groupPosition;
}
public override View GetGroupView( int groupPosition, bool isExpanded, View convertView, ViewGroup parent )
{
View view;
var item = bGroups[ filteredGroupKeys[ groupPosition ] ].label;
if( convertView == null )
{
var inflater = context.GetSystemService(Context.LayoutInflaterService) as LayoutInflater;
view = inflater.Inflate( Resource.Layout.ListGroupItem, null );
}
else
{
view = convertView;
}
try
{
var textBox = view.FindViewById<TextView>( Resource.Id.groupItemListText );
textBox.SetText( item, TextView.BufferType.Normal );
}
catch( Exception ex )
{
}
return view;
}
public override bool IsChildSelectable( int groupPosition, int childPosition )
{
return true;
}
public override int GroupCount
{
get
{
return filteredGroupKeys.Count;
}
}
public override bool HasStableIds
{
get
{
return true;
}
}
private void theClickEvent( object sender, EventArgs e )
{
var selectionState = ( (CheckBox)sender ).Checked;
int tagId = (int)( (CheckBox)sender ).Tag;
bNodes.Where( o => o.id == tagId ).First().selected = selectionState;
}
}
}
答案 0 :(得分:1)
发现错误..
checkBoxSelect.Selected = item.selected;
实际应该是:
checkBoxSelect.Checked = item.selected;
好像我的堆栈溢出了:)