ListView解决嵌套冲突3种办法

注:listview子项item中注意强抢焦点问题:

如果item子项是一个控件,设置控件的一个属性 android:focusable="false",

如果是布局的话,就在跟布局设置 android:descendantFocusability="blocksDescendants"

当时我自己的item中存在Button  我在其属性加入android:clickable="false",android:focusable="false", android:focusableInTouchMode="false"

三条属性

方法一:

在listview添加头部  ,这是最好的解决办法   数据加载量大的时候可以防止内存泄漏


 onCreateView()方法里加载头部布局


head_listview布局是自己加入的布局

View v=inflater.inflate(R.layout.head_listview, null);
listv_dh_activitis.addHeaderView(v);
主布局只需要加入

  <ListView
      android:id="@+id/listview"
      android:layout_width="match_parent"
      android:layout_height="wrap_content" >
  </ListView>

方法二:

自定义ListView,重写onMeasure()方法写上下面的代码

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		   int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,  
	                MeasureSpec.AT_MOST);  
	        super.onMeasure(widthMeasureSpec, expandSpec);  

	}

方法三: 需要计算listview每个item的高

public static void setListViewHeight(ListView listviewli) {
		// 获得ListView的适配器
		ListAdapter adapter = listviewli.getAdapter();
		if (adapter == null)
			return;
		int height = 0;
		for (int i = 0; i < adapter.getCount(); i++) {
			// 单个Item
			View listViewItem = adapter.getView(i, null, listviewli);
			// 计算宽高
			listViewItem.measure(0, 0);
			// 叠加没一个子项的宽高
			height += listViewItem.getMeasuredHeight();
		}
		// 设置高度
		ViewGroup.LayoutParams params = listviewli.getLayoutParams();
		// Item的高度加上分割线的高度的和乘以总个数
		params.height = height + ((listviewli.getDividerHeight()) * (adapter.getCount() - 1));
		listviewli.setLayoutParams(params);
	}
然后用listview方法调用即可



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值