android scrollview中嵌套expandablelistview
16lz
2021-01-23
http://blog.csdn.net/swust_chenpeng/article/details/17413955
一、重新expandablelistview
[java] view plain copy- public class CustomExpandableListView extends ExpandableListView {
- public CustomExpandableListView(Context context, AttributeSet attrs) {
- super(context, attrs);
- // TODO Auto-generated constructor stub
- }
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- // TODO Auto-generated method stub
- int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
- MeasureSpec.AT_MOST);
- super.onMeasure(widthMeasureSpec, expandSpec);
- }
- }
二、动态计算expandablelistview的高度,xxx_group.xml和xxx_child.xml的最外层要用linearlayout,反正relativelayout不行,不知道为什么 [java] view plain copy
- private void setListViewHeight(ExpandableListView listView) {
- ListAdapter listAdapter = listView.getAdapter();
- int totalHeight = 0;
- int count = listAdapter.getCount();
- for (int i = 0; i < listAdapter.getCount(); i++) {
- View listItem = listAdapter.getView(i, null, listView);
- listItem.measure(0, 0);
- totalHeight += listItem.getMeasuredHeight();
- }
- ViewGroup.LayoutParams params = listView.getLayoutParams();
- params.height = totalHeight
- + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
- listView.setLayoutParams(params);
- listView.requestLayout();
- }
三、scrollveiew中嵌套的listview的话,前两种都行,还有一种如下 [java] view plain copy
- public class ViewGroupForListView extends LinearLayout implements View.OnClickListener {
- private ListAdapter mAdapter = null;
- private OnItemClickListener mListener = null;
- public ViewGroupForListView(Context context) {
- super(context);
- }
- public ViewGroupForListView(Context context, AttributeSet attrs) {
- super(context, attrs);
- // TODO Auto-generated constructor stub
- this.setOrientation(VERTICAL);
- }
- /**
- * 绑定数据
- */
- protected void bindData() {
- int count = mAdapter.getCount();
- for(int i = 0; i < count; i++) {
- View v = mAdapter.getView(i, null, null);
- v.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
- v.setOnClickListener(this);
- v.setId(i);
- addView(v, i);
- }
- }
- /**
- * 设置adapter
- * @param adapter
- */
- public void setAdapter(ListAdapter adapter) {
- mAdapter = adapter;
- if(this.getChildCount() != 0) {
- removeAllViews();
- }
- bindData();
- }
- /**
- * 获取adapter
- * @return
- */
- public ListAdapter getAdapter() {
- return mAdapter;
- }
- /**
- * 绑定监听
- * @param listener
- */
- public void setOnItemClickListener(OnItemClickListener listener) {
- this.mListener = listener;
- }
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- if(mListener != null) {
- mListener.onItemClick(v.getId(), mAdapter);
- }
- }
- /**
- * 监听接口
- * @author Visual
- *
- */
- public interface OnItemClickListener {
- public void onItemClick(int position, ListAdapter adapter);
- }
adapter的实现类似普通listview的adapter用法
更多相关文章
- Android 解决 RecyclerView 嵌套 ScrollView 数据显示不全的问题
- Android Studio App LinearLayout多层布局嵌套
- Android - ScrollView 使用小计 里面嵌套的View 如何设置全屏
- Java乔晓松-android的四大组件之一Service(服务的绑定)
- Android 架构组件之 ViewBinding(视图绑定)
- Android中ScrollView嵌套ListView只显示一行的解决方案
- Android中ScrollView中嵌套RecyclerView的完美解决办法
- Android NestedScrolling机制完全解析 带你玩转嵌套滑动
- Android数据绑定Data Binding初体验