Android:ExpandableListViews和Checkboxes
我最近正在玩可扩展列表视图。
我试图获得一个列表视图,其中有一个复选框作为子视图的元素之一。
我找到了这个教程, http://mylifewithandroid.blogspot.com/2010/02/expandable-lists-and-check-boxes.html ,它看起来很完美。 然而,当我编译它并开始玩它时,我意识到它非常错。 选中一个组中的一个框可能会导致另一个组中的随机框检查或取消选中。
这是我能找到的唯一一个教程,这似乎是一个可以在很多应用程序中使用的东西,所以我想知道,还有其他任何好的教程或资源处理这个吗?
或者甚至更好,是否有人愿意展示他们自己的代码让这个工作…
谢谢
千电子伏
在为android开发一个nagios客户端时遇到了同样的问题,我发现,在两者中为convertView参数分配新值至关重要。
-
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)
和 -
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent)
BaseExpandableListAdapter
扩展中的方法。
否则,父/子渲染器将从缓存构建,并且它们不会向您显示正确的内容。
我需要复选框来显示用户是否需要任何类型的警报,看看是否出现了被监视服务的问题。
这是我实现这个目标的方法:
//hosts: the list of data used to build up the hierarchy shown by this adapter's parent list. private class MyExpandableListAdapter extends BaseExpandableListAdapter { private LayoutInflater inflater; public MyExpandableListAdapter() { inflater = LayoutInflater.from(Binding.this); } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { final Host host = hosts.get(groupPosition); final boolean needsLargeView = isExpanded && (host.getTitle() != null) && (host.getTitle().length() > 0); if (needsLargeView) convertView = inflater.inflate(R.layout.grouprow_expanded, parent, false); else convertView = inflater.inflate(R.layout.grouprow, parent, false); convertView.setBackgroundResource(host.getBackgroundResource(isExpanded)); [...] return convertView; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { final Host host = hosts.get(groupPosition); final NagService service = host.getServices().get(childPosition); convertView = inflater.inflate(R.layout.childrow, parent, false); convertView.setBackgroundResource(host.getChildBackgroundResource()); convertView.findViewById(R.id.servicename_status).setBackgroundResource(service.getStatusBackground()); [...] CheckBox alertChb = (CheckBox) convertView.findViewById(R.id.alert); alertChb.setChecked(service.isNeedsAlert()); alertChb.setOnCheckedChangeListener(new YourCheckChangedListener(service)); return convertView; } @Override public Object getChild(int groupPosition, int childPosition) { return hosts.get(groupPosition).getServices().get(childPosition); } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public int getChildrenCount(int groupPosition) { return hosts.get(groupPosition).getServices().size(); } @Override public Object getGroup(int groupPosition) { return hosts.get(groupPosition); } @Override public int getGroupCount() { return hosts.size(); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public void notifyDataSetChanged() { super.notifyDataSetChanged(); } @Override public boolean isEmpty() { return ((hosts == null) || hosts.isEmpty()); } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } @Override public boolean hasStableIds() { return true; } @Override public boolean areAllItemsEnabled() { return true; } }
使用的布局中的childrow.xml是包含复选框的布局。
在CheckedChanhedListener
您应该在受影响的实例(在我的例子中是服务)上保存新状态。
我希望这可以帮助你
这就是我发现的一个很好的指导方针,我们可以如何制作自定义列表视图,无论是复选框还是listview中的任何textview
http://techdroid.kbeanie.com/2009/07/custom-listview-for-android.html
谢谢..
拉克什
- 在SAX解析后在列表视图中显示数据
- java.lang.IllegalStateException:您需要在此活动中使用Theme.AppCompat主题(或后代)
- 列表在更改活动后查看消失
- Espresso onData在视图上执行“加载适配器数据”时出错
- 单击按钮时,如何将Paypal集成到付款用户?
- 在Android中使用google-java-api-client获取Google日历活动的开始和结束时间
- Android和PhoneGap – NPObject上的错误调用方法
- Eclipse中的java.lang.NoClassDefFoundError,但不包含Ant
- 适用于Android的语音生物识别技术