1.首先设置子条目可选:
childViewd的布局文件中
<LinearLayout
android:id="@+id/ll_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:clickable="true" //默认是不可点击 改为可以点击
>
2.设置条目监听事件 由ViewHolder来实现
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
ChildViewHolder viewHolder;
if (convertView == null) {
convertView = View.inflate(mActivity, R.layout.item_learning_tasks_sub_tasks_child, null);
viewHolder = new ChildViewHolder(convertView);
viewHolder.ll_item_sub_task.setOnClickListener(viewHolder); //可以被点击 由viewholder来监听
convertView.setTag(viewHolder);
} else {
viewHolder = (ChildViewHolder) convertView.getTag();
}
viewHolder.groupPosition = groupPosition; //在viewholder中纪录当前的groupPosition
viewHolder.childPosition = childPosition; //在viewholder中纪录当前的childPosition
if(selectedItem[0]==groupPosition&&selectedItem[1]==childPosition){ //判断当前条目是否被选中
viewHolder.ll_item_sub_task.setSelected(true);
}else{
viewHolder.ll_item_sub_task.setSelected(false);
}
return convertView;
}
3.viewHolder中来实现对条目点击的响应
class ChildViewHolder implements View.OnClickListener {
@Bind(R.id.ll_item_sub_task)
LinearLayout ll_item_sub_task;
@Bind(R.id.iv_item_sub_task)
ImageView iv_item_sub_task;
@Bind(R.id.tv_item_sub_task)
TextView tv_item_sub_task;
public int groupPosition;
public int childPosition;
public ChildViewHolder(View view) {
ButterKnife.bind(this, view);
}
@Override
public void onClick(View v) {
selectedItem = new int[]{groupPosition,childPosition}; //将被选中的条目记录到adapter中
notifyDataSetChanged(); //刷新显示
}
}
public class SubAdapter extends BaseExpandableListAdapter {
private int[] selectedItem; //用于记录当前被选中的条目 记得在构造方法中初始化为{-1,-1}
}
完成
另外 在低版本(4.1)的手机上要设置点击效果,不然系统默认的点击效果太丑
在布局中加入:
android:listSelector="@color/light_grey"
即可
如果在低版本手机上在PopupWindow中嵌套使用ExpandableListView的话 记得给PopupWindows设置焦点 可能无法点击条目展开