解决viewpager+多个fragment+listview,listview展示内容高度不自适应出现多余空白问题
做项目遇到这个问题后,在网上搜了下,就找到两篇相关的,但是感觉写的有的乱,看起来不够清晰,所以整理了下完美解决这个问题,下面直接看代码。
一、重写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展示内容高度不自适应出现多余空白问题相关推荐
- android 解决viewpager+多个fragment+recyclerview,viewpager展示内容高度不自适应出现多余空白问题
一.首先要做的就是重写viewpager public class MyViewPager extends ViewPager {private int current;private int hei ...
- ScrollView中嵌入Listview,当item高度不一样的时候,item展示不全问题
首先在scrollview中嵌入listview,我们需要动态设置listview的高度,否则只会展示一行. public void fixListViewHeight(ListView listVi ...
- Android 绿豆通讯录【 SQLite数据库(增删改查、展示数据) + ListView数据展示控件(展示所有数据) 】
前情提要:Android 数据库(SQLite) [简介.创建.使用(增删改查.事务.实战演练).数据显示控件(ListView.Adapter.实战演练-绿豆通讯录)] https://blog.c ...
- vb.net获取服务器中所有数据库名称显示在list,vb listview显示数据库内容,该怎么解决...
当前位置:我的异常网» VB » vb listview显示数据库内容,该怎么解决 vb listview显示数据库内容,该怎么解决 www.myexceptions.net 网友分享于:2013- ...
- 4、Flutter - 控件基础 (二)ListView 列表展示数据、布局
ListView 列表展示数据.布局 接上篇,几点注意事项与说明 1.创建工程项目的时候,存放路径不要有中文,有中文会有警告,而且后面可能会有一些未知的问题. 如果有中文路径,创建完工程移动工程位置的 ...
- fragment中listview触发事件setOnItemClickListener不好使
<listView/>中// listview点击 ,高度wrap_content改成fill_prarent 转载于:https://www.cnblogs.com/zhujiabin/ ...
- 解决Fragment中使用ViewPager时,ViewPager里的Fragment错位和空白问题
这两天开始在改OSChina的开源android客户端,打算用Fragment来分离Main这个Activity里的功能.用Fragment嵌套ViewPager+Fragment的时候发现问题. 红 ...
- 多个ViewPager引发的Fragment未初始化
本文主要介绍ViewPager FragmentPagerAdapter中Fragment缓存的规则. 可能需要在一个Activity中显示多个ViewPager,如GridView或ListView ...
- ##解决 ViewPager 调用 notifyDataSetChanged()无刷新:原理、解决办法##
一.原理 转自:http://www.cnblogs.com/maoyu417/p/3740209.html 转载 http://www.67tgb.com/?p=624 最近项目结束,搞了一次代码分 ...
最新文章
- Oracle总结第二篇【视图、索引、事务、用户权限、批量操作】
- 用python解“逆序三位数”问题
- 报告 | 2019年全球数字化转型现状研究报告
- 海尔推“智能服务”标准 家电产业迎来“互联网+”
- Java 如何有效地避免OOM:善于利用软引用和弱引用
- int.TryParse的使用
- 数据科学竞赛-人脸表情识别
- 漫步数理统计二十——多元随机变量
- java返回空集合对象_返回null或空集合更好吗?
- 大众仪表板上为什么30km,50km处要标红?
- Day2:360培训学习重点笔记(7.14)
- 子进程中获取父进程id_UNIX环境高级编程——进程控制
- 在Docker和Kubernetes上运行MongoDB微服务
- PyCharm中的Debug使用
- 电路板故障测试仪GR4080软件,电路板故障检测仪
- qdir 类似工具_实用工具——多窗口资源管理器qdir
- Spring Boot 接入支付宝完整流程实战
- html chm 打不开,Win7系统中出现CHM打不开的具体解决方法
- 这个游戏的名字叫:哒哒哒哒哒哒
- oa系统需要的服务器配置,oa办公系统需要服务器配置