android关于scrollview嵌套ExpandableListView的实现2

            之前说listview的高度很好计算,ExpandableListiew也差不多

            1.获取有多少个group,就是一级目录, 拿到group的item的高度×group数量*每两个之间的间距   这个间距一般都木有

           然后将高度赋给ExpandableListView

          发现直接ExpandableListView.setLayoutParams不行   好吧 那就改变一下   给ExpandableListView外面套一个LinearLayout

          然后在代码中将高度赋给LinearLayout

         中间用到的dp和dip的转换  在xml中100dp和代码中设置setHeight(100)是不一样的  代码中的数字是以dip为单位的  所以要转化

	/**
	 * dp转换成dip
	 * @param context
	 * @param dpValue
	 * @return
	 */
	public static int dip2px(Context context, float dpValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (dpValue * scale + 0.5f);
	}
	
	/**
	 * dip转换成dp
	 * @param context
	 * @param pxValue
	 * @return
	 */
	public static int px2dip(Context context, float pxValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (pxValue / scale + 0.5f);
	}

            测试  发现OK,BUG最后一项点击出不来子选项,其实已经出来了  只是高度固定死了  看不到而已,在一级目录点击事件中处理

          

               //监听group事件 处理最后一项 
		expandableListView.setOnGroupClickListener(new OnGroupClickListener() {
			@Override
			public boolean onGroupClick(ExpandableListView parent, View v,
					int groupPosition, long id) {
				if(groupPosition==umfList.size()-1){
					int h = DpDipConversionUtil.dip2px(mContext, 100);  //每一个group的高度
					params.height = h*umfList.size()+1;    //总高度+1
					qd.setLayoutParams(params);
				}
				return false;
			}
		});

                那个总高度为什么+1呢?之前想的是  处理最后点击事件然后改变LinearLayout的总高度= 之前的总高度+ 最后一项二级目录的高度

               测试后发现  我的理解是。 不用动态去算最后一项二级目录的高度  只要告诉它下面还有空位置 点击就会展开了     所以在高度后+1, 还有这个+1基本完全不影响界面的

 1dip也就是一个像素点   根本看不出来  所以也不用怕 收回去这个linearlayout的高度不对

            最后说一点  scrollview嵌套listview和ExpandableListView这种  很麻烦  最好不要这样设计   尽量避免这种情况的发生











你可能感兴趣的:(android关于scrollview嵌套ExpandableListView的实现2)