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方法调用即可



阅读更多
个人分类: 安卓开发_android篇
想对作者说点什么? 我来说一句

scrollview嵌套listview冲突解决

2017年04月03日 19.1MB 下载

Android scrollview嵌套listview

2014年03月03日 976KB 下载

没有更多推荐了,返回首页

不良信息举报

ListView解决嵌套冲突3种办法

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭