初步了解ListView及ViewPager

初步了解ListView的使用场合及实现代码

1、关于ListView的有关类

  ListView是安卓UI组件中的AdapterView子类中的一个,下图即是AdapterView及其子类的关系:

AdapterView及其子类

这里我们就可以在边边的地方找到ListView的位置。

2、ListView的使用场合

  ListView是手机系统中使用的非常广泛的一种组件,他以垂直列表的形式显示所有的列表项,就是如手机应用微信中的聊天列表。

3、ListView的实现代码

  接下来重点给大家展示一个简单的ListView实现的方式。
  有两种可实现的方式:
  (1)直接用ListView进行创建;
  (2)用在MainActivity中继承ListActivity。
  设置好ListView后,我们还得加入列表的内容,这就要用到AdapterView显示,调用setAdapter的方法提供内容。

第一种方法:直接用ListView进行创建

  首先在布局文件中设置ListView:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.administrator.listtest.MainActivity">

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"

        android:layout_width="368dp"
        android:layout_height="441dp"
        android:orientation="horizontal"
        tools:layout_editor_absoluteX="8dp"
        tools:layout_editor_absoluteY="75dp">

        <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:divider="#159"
            android:dividerHeight="2px"
            android:headerDividersEnabled="false" />

    </LinearLayout>

</android.support.constraint.ConstraintLayout>

这样设置了listView,但是还需要设置列表的属性,即是内容。设置内容有两种方式,一种是通过设置valus.xml文件中的string.xml和arrray.xml来添加ListView中的entries属性。第二种是通过Adapter来提供列表项。接下来就讲讲第二种方法。

Activity中添加Adapter

  首先,要创建ListView对象关联xml文件中的ListView的id;
  接着,设置数组

    Stirng []arr1 = {"action1","action2","action3"};

  再将数组包装到ArrayAdapter中,ArrayAdapter是Adapter的子类,以数组的形式记录进ListView中。

    ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,R.layout.array_item,arr1);

这样就可以接下来直接调用setAdapter()方法加入到ListView中。就可以看到列表信息的界面了。
这里要注意有三个参数,this是表示context,当前组件,第二个参数代表要加入ListView的文本形式,数组项、可选项等,第三个参数就是ListView中要加入的信息。
这里的ArrayAdapter只能显示一种文本信息,如果改用simpleAdapter,能加入更多的信息,头像,个人签名什么的,以数组的形式保存起来,都会显示在列表项中。

#用在MainActivity中继承ListActivity

  其中其他步骤与第一种方法一样,区别在于,此方法可以不用设置布局变量,只需将Activity中的组件加上容器,

    .....
    setListAdapter(adapter1);

这样就能在界面上看到这个ListView了。


ViewPager的简述

使用场合:从字面就很容易看出这个类的功能就是实现页数的翻来翻去。

含有的方法:很多很多,网上资源很多,这里就不重复了。

以下是主要的几个方法:

setCurrentItem(int item) 

该方法设置显示item位置的界面。

setOffscreenPageLimit(int limit) 

该方法用来设置当前显示页面左右两边各缓存的页面数。

addOnPageChangeListener(OnPageChangeListener listener) 

该方法为ViewPager添加页面切换时的监听,关于界面监听的内容,接下来对OnPageChangeListener中的方法进行讲解时,再详细说明。

setOnScrollChangeListener(OnScrollChangeListener l) 

该方法为ViewPager增加滚动状态监听,但该方法需要minSdkVersion为23

OnPageChangeListener中的三个方法详解

    onPageScrollStateChanged(int state) 

该方法在手指操作屏幕的时候发生变化。有三个值:0(END),1(PRESS) ,2(UP) 。当用手指滑动翻页时,手指按下去的时候会触发这个方法,state值为1,手指抬起时,如果发生了滑动(即使很小),这个值会变为2,然后最后变为0 。总共执行这个方法三次。一种特殊情况是手指按下去以后一点滑动也没有发生,这个时候只会调用这个方法两次,state值分别是1,0 。当setCurrentItem翻页时,会执行这个方法两次,state值分别为2 ,0 。

    onPageScrolled(int position, float positionOffset, int positionOffsetPixels) 

>
该方法在滑动过程中将一直被调用,该方法的参数说明如下:
position:
  当用手指滑动时,如果手指按在页面上不动,position和当前页面index是一致的;如果手指向左拖动(相应页面向右翻动),这时候position大部分时间
和当前页面是一致的,只有翻页成功的情况下最后一次调用才会变为目标页面;如果手指向右拖动(相应页面向左翻动),这时候position大部分时间和目标页面是一致的
,只有翻页不成功的情况下最后一次调用才会变为原页面。当直接设置setCurrentItem翻页时,如果是相邻的情况(比如现在是第二个页面,跳到第一或者第三个页面),
如果页面向右翻动,大部分时间是和当前页面是一致的,只有最后才变成目标页面;如果向左翻动,position和目标页面是一致的。这和用手指拖动页面翻动是基本一致的。
如果不是相邻的情况,比如我从第一个页面跳到第三个页面,position先是0,然后逐步变成1,然后逐步变成2;我从第三个页面跳到第一个页面,position先是1,然后
逐步变成0,并没有出现为2的情况。

positionOffset:
&emsp;&emsp;当前页面滑动比例,如果页面向右翻动,这个值不断变大,最后在趋近1的情况后突变为0。如果页面向左翻动,这个值不断变小,最后变为0。 
positionOffsetPixels:
&emsp;&emsp;当前页面滑动像素,变化情况和positionOffset一致

三个方法的执行顺序:用手指拖动翻页时,最先执行一遍onPageScrollStateChanged(1),然后不断执行onPageScrolled,放手指的时候,直接立即执行一次onPageScrollStateChanged(2),然后立即执行一次onPageSelected,然后再不断执行onPageScrollStateChanged,最后执行一次onPageScrollStateChanged(0)。

三个方法的执行顺序:

  用手指拖动翻页时,最先执行一遍onPageScrollStateChanged(1),然后不断执行onPageScrolled,放手指的时候,直接立即执行一次onPageScrollStateChanged(2),然后立即执行一次onPageSelected,然后再不断执行onPageScrollStateChanged,最后执行一次onPageScrollStateChanged(0)。

————————就先写到这里了。

猜你喜欢

转载自blog.csdn.net/weixin_41625927/article/details/80906992