Android--(15)--解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和直接出现ListView底部的解决方案

有这样一个需求:
  1.显示一个界面,界面上有一个列表(ListView),列表上面有一个可以滚动的海报。

  2.要求在ListView滚动的过程中,ListView上面的海报也可以跟着ListView滚动。

我们的一般解决方案:

1.使用ScrollView嵌套这一个ListView。

对,这样的布局本身是没哟什么问题的。但是问题来了,当你运行你的界面的时候,突然发现,你的列表中明明有好多项,但是为什么只显示一项呢?仔细检查你会发现,不是列表只显示一项,而是其它的项被布局本身遮住了。

怎么办呢?下面将给出两种相对简单的解决方案:

第一种:禁用ListView的滚动(Scroll)。

第二种:计算ListView中每一项的高度,然后根据每一项的高度“乘以”项数,计算出ListView的总高度。

下面给出第一种方法的代码展示:

import android.widget.ListView;  

public class MyListView extends ListView{  
    public MyListView(android.content.Context context,android.util.AttributeSet attrs){    
        super(context, attrs);    
    }    
    /**  
     * 设置不滚动  
     */    
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)    
    {    
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,    
                MeasureSpec.AT_MOST);    
        super.onMeasure(widthMeasureSpec, expandSpec);    

    }    
}  

以下是第二种方法的的代码:

/**动态改变listView的高度*/  
    public void setListViewHeightBasedOnChildren(ListView listView) {  
          ListAdapter listAdapter = listView.getAdapter();  
          if (listAdapter == null) {  
           return;  
          }  
          int totalHeight = 0;  
         for (int i = 0; i < listAdapter.getCount(); i++) {  
           View listItem = listAdapter.getView(i, null, listView);  
           listItem.measure(0, 0);  
           totalHeight += listItem.getMeasuredHeight();  
//           totalHeight += 80;  
          }  
          ViewGroup.LayoutParams params = listView.getLayoutParams();  
//          params.height = 80 * (listAdapter.getCount() - 1);  
//          params.height = 80 * (listAdapter.getCount());  
          params.height = totalHeight  
            + (listView.getDividerHeight() * (listAdapter.getCount() - 1));  
          ((MarginLayoutParams) params).setMargins(0, 0, 0, 0);  
          listView.setLayoutParams(params);  

         }  

第一种方法在相应的布局文件中使用时要注意:

   <com.example.watchappdemo.MyListView
       //使用相对应的包名来引用listview
        android:id="@+id/list_zixun"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:scrollbars="none" >
   </com.example.watchappdemo.MyListView>

ScrollView嵌套ListView会出现的ListView底部会自动出现在屏幕上
ScrollView嵌套了一个自定义的ListView后,ListView底部每次都会直接出现在屏幕上,把listview上面的内容会顶走,怎么解决了有两个方法,
一.在代码中让listview失去焦点,
二.在scrollview的上一层布局中加入一个属性android:descendantFocusability=”blocksDescendants”,完美解决
参考地址:http://www.cnblogs.com/tony-yang-flutter/p/3344636.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值