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加载数据不全的情况

    
    
    
  • 相关阅读:
    169. Majority Element
    283. Move Zeroes
    1331. Rank Transform of an Array
    566. Reshape the Matrix
    985. Sum of Even Numbers After Queries
    1185. Day of the Week
    867. Transpose Matrix
    1217. Play with Chips
    766. Toeplitz Matrix
    1413. Minimum Value to Get Positive Step by Step Sum
  • 原文地址:https://www.cnblogs.com/langdon/p/6248593.html
Copyright © 2011-2022 走看看