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


 

posted on 2017-01-04 14:35  泰洋  阅读(331)  评论(0编辑  收藏  举报

导航