expandlistview 分组+浮动条

  

分组实现:主要是数据结构的组织和getGroupVIew函数中的判断处理。

public class RecordExpandableListViewAdapter extends BaseExpandableListAdapter {


private Context mContext;
private ArrayList<Object> mList;
private LayoutInflater mInflater;


class GroupViewHolder {
TextView tv_time;
ImageView img_groupIndicator;
}


class ChildViewHolder {
TextView tv_name;
TextView tv_status;
}


public RecordExpandableListViewAdapter(Context context,
ArrayList<Object> list) {
// TODO Auto-generated constructor stub
mContext = context;
mList = list;


mInflater = LayoutInflater.from(context);
}


@Override
public Object getChild(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
Object obj_group = mList.get(groupPosition);
Object obj_child = null;


if (obj_group instanceof Room) {
Room r = (Room) obj_group;
obj_child = r.tables.get(childPosition);
}
return obj_child;
}


@Override
public long getChildId(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return childPosition;
}


@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ChildViewHolder childViewHolder = null;
if (convertView == null) {
childViewHolder = new ChildViewHolder();
convertView = mInflater.inflate(R.layout.child_record, null);


childViewHolder.tv_name = (TextView) convertView
.findViewById(R.id.tv_room_name);
childViewHolder.tv_status = (TextView) convertView
.findViewById(R.id.tv_status);


convertView.setTag(childViewHolder);
} else {
childViewHolder = (ChildViewHolder) convertView.getTag();
}
Object obj = mList.get(groupPosition);
if (obj instanceof String) {
} else if (obj instanceof Room) {
Room r = (Room) obj;
String name = r.tables.get(childPosition).name;
String status = r.tables.get(childPosition).status;
childViewHolder.tv_name.setText(name);
childViewHolder.tv_status.setText(status);
}
return convertView;


}


@Override
public int getChildrenCount(int groupPosition) {
// TODO Auto-generated method stub
int count = 0;
Object obj = mList.get(groupPosition);


if (obj instanceof String) {
count = 0;
} else if (obj instanceof Room) {
Room r = (Room) obj;
count = r.tables.size();
}
return count;
}


@Override
public Object getGroup(int groupPosition) {
// TODO Auto-generated method stub
Object record = mList.get(groupPosition);
return record;
}


@Override
public int getGroupCount() {
// TODO Auto-generated method stub
return mList.size();
}


@Override
public long getGroupId(int groupPosition) {
// TODO Auto-generated method stub
return groupPosition;
}


@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
GroupViewHolder holder = null;
if (convertView == null) {
holder = new GroupViewHolder();
convertView = mInflater.inflate(R.layout.group_record, null);


holder.tv_time = (TextView) convertView
.findViewById(R.id.tv_record_time);
holder.img_groupIndicator = (ImageView) convertView
.findViewById(R.id.img_groupIndicator);
convertView.setTag(holder);
} else {
holder = (GroupViewHolder) convertView.getTag();
}
Object obj = mList.get(groupPosition);


String group = "";
if (obj instanceof String) {
group = (String) obj;
convertView.setBackgroundResource(R.color.deep_blue);
holder.img_groupIndicator.setVisibility(View.GONE);
} else if (obj instanceof Room) {
Room r = (Room) obj;
group = r.name;
convertView.setBackgroundResource(R.color.light_green);
holder.img_groupIndicator.setVisibility(View.VISIBLE);
if (isExpanded) {
holder.img_groupIndicator
.setImageResource(R.drawable.expander_open_holo_light);
} else {
holder.img_groupIndicator
.setImageResource(R.drawable.expander_close_holo_light);
}


}
holder.tv_time.setText(group);


return convertView;
}


@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return false;
}


@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return true;
}


}



浮动标签实现:

xml定义:

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/btn_submit_all" >


        <ExpandableListView
            android:id="@+id/elv_record"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:drawSelectorOnTop="false"
            android:fastScrollEnabled="true"
            android:groupIndicator="@null" >
        </ExpandableListView>


        <TextView
            android:id="@+id/topGroup"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#cc33B5E5"
            android:paddingLeft="5dp"
            android:textSize="18sp" >
        </TextView>
    </FrameLayout>

    

activity 中设置 expandlistview 的onScroll监听elv_record.setOnScrollListener(this);

实现onScroll方法:

@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
final ExpandableListView listView = (ExpandableListView) view;
/**
* calculate point (0,0)
*/
int npos = view.pointToPosition(0, 0);// 其实就是firstVisibleItem
if (npos == AdapterView.INVALID_POSITION)// 如果第一个位置值无效
return;


long pos = listView.getExpandableListPosition(npos);
// int childPos = ExpandableListView.getPackedPositionChild(pos);// 获取第一行child的id
int groupPos = ExpandableListView.getPackedPositionGroup(pos);// 获取第一行group的id


// MyLog.v(TAG, "groupPos=" + groupPos);
// MyLog.v(TAG, "childPos=" + childPos);


Object obj = adapter.getGroup(groupPos);
if (obj instanceof Room) {
indicatorGroup.setVisibility(View.VISIBLE);
} else {
indicatorGroup.setVisibility(View.GONE);// 隐藏指示器
}


// update the data of indicator group view
if (groupPos != indicatorGroupId) {// 如果指示器显示的不是当前group
indicatorGroupId = groupPos;
indicatorGroup.setText(getTime(groupPos));
}
if (indicatorGroupId == -1) // 如果此时grop的id无效,则返回
return;


}


评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C_see

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值