做项目遇到这个问题后,在网上搜了下,就找到两篇相关的,但是感觉写的有的乱,看起来不够清晰,所以整理了下完美解决这个问题,下面直接看代码。

一、重写viewpager

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;import java.util.HashMap;
import java.util.LinkedHashMap;/*** Created by lenovo on 2018/3/8.*/public class WrapContentHeightViewPager extends ViewPager {private int current;private int height = 0;/*** 保存position与对应的View*/private HashMap<Integer, View> mChildrenViews = new LinkedHashMap<Integer, View>();private boolean scrollble = true;public WrapContentHeightViewPager(Context context) {super(context);}public WrapContentHeightViewPager(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {if (mChildrenViews.size() > current) {View child = mChildrenViews.get(current);child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));height = child.getMeasuredHeight();}heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);super.onMeasure(widthMeasureSpec, heightMeasureSpec);}public void resetHeight(int current) {this.current = current;if (mChildrenViews.size() > current) {LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) getLayoutParams();if (layoutParams == null) {layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, height);} else {layoutParams.height = height;}setLayoutParams(layoutParams);}}/*** 保存position与对于的View*/public void setObjectForPosition(View view, int position) {mChildrenViews.put(position, view);}@Overridepublic boolean onTouchEvent(MotionEvent ev) {if (!scrollble) {return true;}return super.onTouchEvent(ev);}public boolean isScrollble() {return scrollble;}public void setScrollble(boolean scrollble) {this.scrollble = scrollble;}}

二、在父fragment中提供一个公共的方法,给子fragment调用

/**** 提供子fragment调用方法,解决listview高度不自适应出现多余空白*/
public  void setChildObjectForPosition(View view,int poistion){mPager.setObjectForPosition(view,poistion);
}

三、在viewpager的onPageSelected()方法中重置高度

@Override
public void onPageSelected(int arg0) {mPager.resetHeight(arg0);
}

四、在子fragment的onCreateView()方法中调用父fragment的方法

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_report_latest,container,false);HomeFragment homeFragment = (HomeFragment) getParentFragment();homeFragment.setChildObjectForPosition(view,0);return view;
}

到此问题就可以完美解决了,如有疑问请留言。

解决viewpager+多个fragment+listview,listview展示内容高度不自适应出现多余空白问题相关推荐

  1. android 解决viewpager+多个fragment+recyclerview,viewpager展示内容高度不自适应出现多余空白问题

    一.首先要做的就是重写viewpager public class MyViewPager extends ViewPager {private int current;private int hei ...

  2. ScrollView中嵌入Listview,当item高度不一样的时候,item展示不全问题

    首先在scrollview中嵌入listview,我们需要动态设置listview的高度,否则只会展示一行. public void fixListViewHeight(ListView listVi ...

  3. Android 绿豆通讯录【 SQLite数据库(增删改查、展示数据) + ListView数据展示控件(展示所有数据) 】

    前情提要:Android 数据库(SQLite) [简介.创建.使用(增删改查.事务.实战演练).数据显示控件(ListView.Adapter.实战演练-绿豆通讯录)] https://blog.c ...

  4. vb.net获取服务器中所有数据库名称显示在list,vb listview显示数据库内容,该怎么解决...

    当前位置:我的异常网» VB » vb listview显示数据库内容,该怎么解决 vb listview显示数据库内容,该怎么解决 www.myexceptions.net  网友分享于:2013- ...

  5. 4、Flutter - 控件基础 (二)ListView 列表展示数据、布局

    ListView 列表展示数据.布局 接上篇,几点注意事项与说明 1.创建工程项目的时候,存放路径不要有中文,有中文会有警告,而且后面可能会有一些未知的问题. 如果有中文路径,创建完工程移动工程位置的 ...

  6. fragment中listview触发事件setOnItemClickListener不好使

    <listView/>中// listview点击 ,高度wrap_content改成fill_prarent 转载于:https://www.cnblogs.com/zhujiabin/ ...

  7. 解决Fragment中使用ViewPager时,ViewPager里的Fragment错位和空白问题

    这两天开始在改OSChina的开源android客户端,打算用Fragment来分离Main这个Activity里的功能.用Fragment嵌套ViewPager+Fragment的时候发现问题. 红 ...

  8. 多个ViewPager引发的Fragment未初始化

    本文主要介绍ViewPager FragmentPagerAdapter中Fragment缓存的规则. 可能需要在一个Activity中显示多个ViewPager,如GridView或ListView ...

  9. ##解决 ViewPager 调用 notifyDataSetChanged()无刷新:原理、解决办法##

    一.原理 转自:http://www.cnblogs.com/maoyu417/p/3740209.html 转载 http://www.67tgb.com/?p=624 最近项目结束,搞了一次代码分 ...

最新文章

  1. Oracle总结第二篇【视图、索引、事务、用户权限、批量操作】
  2. 用python解“逆序三位数”问题
  3. 报告 | 2019年全球数字化转型现状研究报告
  4. 海尔推“智能服务”标准 家电产业迎来“互联网+”
  5. Java 如何有效地避免OOM:善于利用软引用和弱引用
  6. int.TryParse的使用
  7. 数据科学竞赛-人脸表情识别
  8. 漫步数理统计二十——多元随机变量
  9. java返回空集合对象_返回null或空集合更好吗?
  10. 大众仪表板上为什么30km,50km处要标红?
  11. Day2:360培训学习重点笔记(7.14)
  12. 子进程中获取父进程id_UNIX环境高级编程——进程控制
  13. 在Docker和Kubernetes上运行MongoDB微服务
  14. PyCharm中的Debug使用
  15. 电路板故障测试仪GR4080软件,电路板故障检测仪
  16. qdir 类似工具_实用工具——多窗口资源管理器qdir
  17. Spring Boot 接入支付宝完整流程实战
  18. html chm 打不开,Win7系统中出现CHM打不开的具体解决方法
  19. 这个游戏的名字叫:哒哒哒哒哒哒
  20. oa系统需要的服务器配置,oa办公系统需要服务器配置

热门文章

  1. C/C++ 复制数组【简单易懂,代码可以直接运行】
  2. C++数星星(树状数组)
  3. 【学习汇编语言】王爽的汇编语言书中更改字母大小写的一道题
  4. 【好物推荐】Snipaste,一款简单但强大的截图工具
  5. 神经网络算法的关键参数,神经网络输入输出计算
  6. kali linux连接wifi
  7. excel日历弄到html,怎么在excel中插入日历
  8. Flink-cdc 同步mysql数据
  9. 准确度(Accuracy)和精密度(Precision)
  10. 五星级酒店无线覆盖解决方案-汉川滨湖大酒店部署方案