zoukankan      html  css  js  c++  java
  • Scrollerview与listview或者gridview发生冲突

    滑动冲突说实在的就是子view的滑动事件与父view的滑动事件的监听都在同时触发,而导致的activity的点击事件或者布局出问题

    常见的就有Scrollerview与Scrollerview与listview或者gridview发生冲突,listview是RecycleView等等的代表。话说,其中listview和scrollerview冲突的时候发生的问题比较奇葩

    其中,listview只能显示一条数据我就震惊了,多方查询后才发现是冲突问题。(还是那句作为初学者,积少成多,提高解决问题速度,提高 效率)

    Scrollerview与listview发生滑动冲突的解决方法有2种, 

    (1)新建一个listview类继承listview,并重新它的onMeasure方法

    package com.tfot.hotel.yichengyiyu.Activity.zhou_activity.view;
    
    import android.content.Context;
    import android.util.AttributeSet;
    import android.view.LayoutInflater;
    import android.widget.ImageView;
    import android.widget.ListView;
    import android.widget.TextView;
    
    public class SouSuoLiShiListView extends ListView {
        private LayoutInflater inflater;
        private  TextView sousuolishi;
        private ImageView sousuo_shanchuyitiao_iv;
        public SouSuoLiShiListView(Context context) {
            super(context);
    
    
    
        }
    
        public SouSuoLiShiListView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public SouSuoLiShiListView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
        }
    
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                    MeasureSpec.AT_MOST);
            super.onMeasure(widthMeasureSpec, expandSpec);
        }
    
    }

    (2)计算高度等等

        /**
         * 重新计算ListView的高度,解决ScrollView和ListView两个View都有滚动的效果,在嵌套使用时起冲突的问题
         * @param listView
         */
        public void setListViewHeight(ListView listView) {
    
            // 获取ListView对应的Adapter
    
            ListAdapter listAdapter = listView.getAdapter();
    
            if (listAdapter == null) {
                return;
            }
            int totalHeight = 0;
            for (int i = 0, len = listAdapter.getCount(); i < len; i++) { // listAdapter.getCount()返回数据项的数目
                View listItem = listAdapter.getView(i, null, listView);
                listItem.measure(0, 0); // 计算子项View 的宽高
                totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
            }
    
            ViewGroup.LayoutParams params = listView.getLayoutParams();
            params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
            listView.setLayoutParams(params);
        }

    使用

     // 创建adapter适配器对象
            adapter =new SouSuoListAdapter(this,sousuo,mListener);
            // 设置适配器
            acticity_sousuoye_lv.setAdapter(adapter);
            setListViewHeight(acticity_sousuoye_lv);
            acticity_sousuoye_lv.setOnItemClickListener(this);
            adapter.notifyDataSetChanged();

    Scrollerview与gridview发生冲突的解决方法也是重写方法

    package com.tfot.hotel.yichengyiyu.Activity.zhou_activity.view;
    
    import android.content.Context;
    import android.util.AttributeSet;
    import android.widget.GridView;
    
    public class MyGridView extends GridView {
      
        public MyGridView(Context context) {
            super(context);  
        }  
      
        public MyGridView(Context context, AttributeSet attrs) {
            super(context, attrs);  
        }  
      
        public MyGridView(Context context, AttributeSet attrs, int defStyle) {  
            super(context, attrs, defStyle);  
            // TODO 自动生成的构造函数存根  
        }  
      
        @Override  
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
            // TODO 自动生成的方法存根  
            int expandSpec = MeasureSpec.makeMeasureSpec(   
                    Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);   
            super.onMeasure(widthMeasureSpec, expandSpec);   
        }
    }
  • 相关阅读:
    Good Bye 2015 D
    Good Bye 2015 C
    good bye 2015 B
    寒假训练第九场 Brocard Point of a Triangle
    HDU 3289 Cat VS Dog (二分匹配 求 最大独立集)
    HDU 1029 Ignatius and the Princess IV DP
    找钱问题
    POJ3260——背包DP(多重)——The Fewest Coins
    Charm Bracelet
    POJ1787——背包DP(特定状态+回溯)——Charlie's Change
  • 原文地址:https://www.cnblogs.com/mrszhou/p/7101029.html
Copyright © 2011-2022 走看看