ListView解决嵌套冲突3种办法

来源:互联网 发布:淘宝卖假货举报中心 编辑:程序博客网 时间:2024/06/05 22:52

注: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()方法写上下面的代码

@Overrideprotected 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++) {// 单个ItemView 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
原创粉丝点击