zoukankan      html  css  js  c++  java
  • 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加载数据不全的情况

    
    
    
  • 相关阅读:
    Tomcat给我的java.lang.OutOfMemoryError: PermGen
    解决:dubbo找不到dubbo.xsd报错
    html li css选中状态切换
    JavaScript jQuery 中定义数组与操作及jquery数组操作 http://www.jb51.net/article/76601.htm
    Hibernate中多对多的annotation的写法(中间表可以有多个字段)
    @OneToMany、@ManyToOne以及@ManyToMany讲解
    mysql中char,varchar与text类型的区别和选用
    MYSQL数据库设计规范与原则
    使用fastJSON解析HashMap中的数据
    python测试开发django-29.发送html格式邮件
  • 原文地址:https://www.cnblogs.com/langdon/p/6248593.html
Copyright © 2011-2022 走看看