ScrollView嵌套ListView,GridView数据加载不全问题的解决
我们大家都知道ListView,GridView加载数据项,如果数据项过多时,就会显示滚动条。ScrollView组件里面只能包含一个组件,当ScrollView里面嵌套listView,GridView时,由于ScrollView,ListView,GridView都有滚动条,系统默认ScrollView的滚动条,ListView,GridView的滚动条会被忽略,就会出现数据加载不全的问题。解决这种问题,要利用自定义布局的知识解决,具体实现如下所示:
一.ListView数据加载不全问题的解决的解决
1.MyListViewActivity.class
public class MyListViewActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_list_view);
}
}
2.MyListView.class
/**
* 自定义listView,解决scrowView嵌套listView,
* listView里面的滚动条不显示导致数据显示不全的问题
*/ public class MyListView extends ListView {
public MyListView(Context context) {
super(context);
} public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
} public MyListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
} @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int exeSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, exeSpec); }
}
3.strings.xml
<resources>
<string name="app_name">泰洋</string>
<string-array name="userName">
<item>马里山</item>
<item>陈渠珍</item>
<item>金日成</item>
<item>金成日</item>
<item>姜涛</item>
<item>李想</item>
<item>牛奔</item>
<item>金鑫</item>
<item>乐嘉</item>
<item>刘梅</item>
<item>樊城</item>
<item>卢决</item>
<item>邓乐</item>
<item>陈吉</item>
</string-array>
</resources>
4.activity_my_list_view.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_my_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.langdon.taiyang.androidtest.autoView.MyListViewActivity"> <!--方式一
<ListView
android:entries="@array/userName"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 3"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 4"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 5"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 6"
android:layout_width="match_parent"
android:layout_height="wrap_content" />-->
<!--方式二
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ListView
android:entries="@array/userName"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 3"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 4"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 5"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 6"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</ScrollView>-->
<!--方式三-->
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.langdon.taiyang.androidtest.autoView.MyListView
android:entries="@array/userName"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 3"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 4"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 5"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 6"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</ScrollView>
</LinearLayout>
效果图如下:
![]() |
![]() |
![]() |
总结:从左往右是:方法一,方法二,方法三的图片;方法二显示的就是ListView加载数据不全的情况
二.GridView数据加载不全问题的解决的解决
1.MyGridViewActivity.class
public class MyGridViewActivity extends AppCompatActivity {
private GridView gv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_grid); gv = (GridView) findViewById(R.id.gv_my_gridView);
gv.setAdapter(new MyAdapter(this));
gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MyGridViewActivity.this,"gridview"+position,Toast.LENGTH_LONG).show();
}
});
} //自定义适配器
static class MyAdapter extends BaseAdapter {
private Context context;
public MyAdapter(Context context){
this.context = context;
} private int[] imges = {R.mipmap.gradview_dog_one,R.mipmap.gradview_dog_two,R.mipmap.gradview_dog_three,
R.mipmap.gradview_dog_one,R.mipmap.gradview_dog_two,R.mipmap.gradview_dog_three,
R.mipmap.gradview_dog_one,R.mipmap.gradview_dog_two,R.mipmap.gradview_dog_three,
R.mipmap.gradview_dog_one,R.mipmap.gradview_dog_two,R.mipmap.gradview_dog_three,};
private String[] names = {"拉布拉多","泰迪","柴犬","牧羊犬",
"拉布拉多","泰迪","柴犬","牧羊犬",
"拉布拉多","泰迪","柴犬","牧羊犬"};
@Override
public int getCount() {
return names.length;
} @Override
public Object getItem(int position) {
return names[position];
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater layoutInflater = LayoutInflater.from(context);
View view = layoutInflater.inflate(R.layout.gridview_item,null); ImageView iv = (ImageView) view.findViewById(R.id.iv_gridview_img);
TextView tv = (TextView) view.findViewById(R.id.tv_gridview_name);
iv.setImageResource(imges[position]);
tv.setText(names[position]);
return view;
}
}
}
2.MyGridView.class
/**
* 自定义gridView,解决scrowView嵌套gridView,
* 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 defStyleAttr) {
super(context, attrs, defStyleAttr);
} @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int exeSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, exeSpec);
}
}
3.activity_my_grid.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.langdon.taiyang.androidtest.autoView.MyGridViewActivity"> <!--方式一
<GridView
android:id="@+id/gv_my_gridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="4"
android:horizontalSpacing="10dp"
android:verticalSpacing="10dp" />
<Button
android:text="button 1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 3"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 4"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 5"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 6"
android:layout_width="match_parent"
android:layout_height="wrap_content" />-->
<!--方式二:scrollView中只能有一个组件
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<GridView
android:id="@+id/gv_my_gridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="4"
android:horizontalSpacing="10dp"
android:verticalSpacing="10dp" />
<Button
android:text="button 1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 3"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 4"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 5"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 6"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</ScrollView>-->
<!--方式三-->
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.langdon.taiyang.androidtest.autoView.MyGridView
android:id="@+id/gv_my_gridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="4"
android:horizontalSpacing="10dp"
android:verticalSpacing="10dp" />
<Button
android:text="button 1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 3"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 4"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 5"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:text="button 6"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</ScrollView> </LinearLayout>
效果图如下:
![]() |
![]() |
![]() |
总结:从左往右依次是:方法一,方法二,方法三的图片;方法二显示的就是GridView加载数据不全的情况
ScrollView嵌套ListView,GridView数据加载不全问题的解决的更多相关文章
- Android之ListView分页数据加载
1.效果如下: 实例如下: 上图的添加数据按钮可以换成一个进度条 因为没有数据所以我加了一个按钮添加到数据库用于测试:一般在服务器拉去数据需要一定的时间,所以可以弄个进度条来提示用户: 点击加载按 ...
- 关于ligerui 中 grid 表格的扩展搜索功能在远程数据加载时无法使用的解决办法
要想使用grid里的扩展搜索功能,除了要引用ligerui主要的js文件外,还必须引入下面的JS文件: 1.Source\demos\filter\ligerGrid.showFilter.js 2. ...
- ScrollView嵌套ListView嵌套GridView的上下拉以及加载更多
ScrollView 效果 ScrollView 说明 一个ScrollView 嵌套ListView 嵌套GridView的上拉加载更多,下拉刷新的demo. 主要是重写了GridView和Lsit ...
- android中ScrollView嵌套ListView或GridView显示位置问题
Android中ScrollView中嵌套ListView或GridView时在开始进入界面时总是显示中间位置,开头的位置显示不出来.这种情况下只需要在ScrollView的父控件中添加以下两行代码即 ...
- Android: 阻止ScrollView随着数据加载自动滚动
当ScrollView中有类似GridView的控件时,当数据加载后ScrollView会自动滚动.要阻止这种事情发生,我们需要做的是在ScrollView的下层容器中添加android:descen ...
- ListView用法及加载数据时的闪烁问题和加载数据过慢问题
ListView介绍及添加数据时的闪烁问题 1. ListView类 1.1 ListView常用的基本属性: (1)FullRowSelect:设置是否行选择模式.(默认为false) 提示 ...
- ScrollView嵌套ListView、GridView,进入页面显示的位置并不是在最顶部,而是在中间部分问题
在Android项目的开发中,经常会遇到一些布局,可能需要在ScrollView中嵌套ListView或.GridView来实现, 是在使用的过程总又遇到了一个新的问题,就是如果在ScrollView ...
- XE7 & FMX 那些年我们一起上过的控件:ListView 之 (3) 加载数据时如何显示自定义样式
本文介绍一下ListView下如何加载数据.及使用进度条反馈当前进度给用户. 注意: 原创作品,请尊重作者劳动成果,转载请注明出处!!!原文永久固定地址:http://www.cnblogs.com/ ...
- Android——MeasureSpec学习 - 解决ScrollView嵌套ListView和GridView冲突的方法
原文地址:http://blog.csdn.net/yuhailong626/article/details/20639217 在自定义View和ViewGroup的时候,我们经常会遇到int ...
随机推荐
- 读书笔记:《HTML5开发手册》--HTML5新的结构元素
读书笔记:<HTML5开发手册> (HTML5 Developer's CookBook) 虽然从事前端开发已有很长一段时间,对HTML5标签也有使用,但在语义化上面理解还不够清晰.之前在 ...
- Azkaban源码学习笔记
1. ConnectorParams (interface): 定义了各种常量参数,没有声明任何方法. 2. ExecutorServlet.java类 2.1 继承类HttpServlet和接口 ...
- ABP源码分析一:整体项目结构及目录
ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...
- 07. Web大前端时代之:HTML5+CSS3入门系列~H5 地理位置
Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 源码:https://github.com/duniti ...
- Java 8五大主要功能为开发者提供了哪些便利?
两年前当Java 8发布后,立即受到了业界的欢迎,因为它大大提高了Java的性能.它独特的卖点是,顾及了编程语言的每一个方面,包括JVM(Java虚拟机)和编译器,并且改良了其它帮助系统. Java是 ...
- Aaron Stannard谈Akka.NET 1.1
Akka.NET 1.1近日发布,带来新特性和性能提升.InfoQ采访了Akka.net维护者Aaron Stannard,了解更多有关Akka.Streams和Akka.Cluster的信息.Aar ...
- 树莓派 基于Web的温度计
前言:家里的树莓派吃灰很久,于是拿出来做个室内温度展示也不错. 板子是model b型. 使用Python开发,web框架是flask,温度传感器是ds18b20 1 硬件连接 ds18b20的vcc ...
- JAVA设计模式之模板模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...
- Impress.js上手 - 抛开PPT、制作Web 3D幻灯片放映
前言: 如果你已经厌倦了使用PPT设置路径.设置时间.设置动画方式来制作动画特效.那么Impress.js将是你一个非常好的选择. 用它制作的PPT将更加直观.效果也是嗷嗷美观的. 当然,如果用它来装 ...
- Mono 3.8发布:性能进一步改进,可伸缩性提升
9月4日,Mono 3.8.0发布了.该版本的运行时带来了一些性能和可伸缩性方面的改进,同时完成了向Windows平台的移植. Mono遵循Gnome和Linux内核的版本编号策略,这意味着3.8是3 ...