您的位置:首页 > 其它

安卓第六天笔记--ListView

2016-03-06 00:22 417 查看


安卓第六天笔记--ListView


安卓第六天笔记--ListView

1.AdapteView

AdapteView 继承ViewGroup它的本质是容器

AdapterView派生了3个子类:

AbsListView

AbsSpinner

AdapterViewAnimation

这3个类是抽象类

实际使用中采用的是它们的子类



2.Adpate结构



3.使用ArrayAdapter完成ListView显示



ListView使用的是ListAdapter类型的适配器

由于只显示文字,所有使用ArrayAdapter

ArrayAdapter 是ListAdapter的子类

布局文件

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

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

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

<!--

divider:分隔线颜色

dividerHeight:分隔线高度

ListView

建议 layout_width:与 layout_height 都设置为match_parent

要预览的话要有ID属性

-->

<ListView

android:id="@+id/lv"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:divider="@color/colorAccent"

android:dividerHeight="2dp">

</ListView>

</LinearLayout>


Activity

/**

* ListView使用

* ArrayAdapter适配器

*/

public class MainActivity extends AppCompatActivity {

/*

ListView

*/

private ListView lv;

private String [] items={

"孙悟空",

"猪八戒",

"牛魔王",

"JAVA",

"Android",

"Ajax",

"XML",

"Spring",

"Hibernate",

"Spring MVC",

"MyBatis"

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

lv = (ListView) findViewById(R.id.lv);

/*

public ArrayAdapter(Context context, @LayoutRes int resource, @NonNull T[] objects)

context:上下文

*/

//为ListView设置适配器

lv.setAdapter(new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,items));

}

}


android.R.layout.simple_list_item_1

内部就是一个TextView

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

android:id="@android:id/text1"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:textAppearance="?android:attr/textAppearanceListItemSmall"

android:gravity="center_vertical"

android:paddingStart="?android:attr/listPreferredItemPaddingStart"

android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"

android:minHeight="?android:attr/listPreferredItemHeightSmall" />


4.使用SimpleAdapter

public SimpleAdapter(Context context, List<? extends Map<String, ?>> data,

@LayoutRes int resource, String[] from, @IdRes int[] to)


context:上下文

LIst<? extends Map<String,/.>> data: 集合类型的对象,每个元素都是一个Map<String,?>对象

resource:提定一个界面布局的ID,布局文件

from:该参数提取Map<String,?>的key

to:int[]类型的参数决定填充哪些控件



布局文件:


View
Code

listview填充的布局文件


View
Code

Activity中SimpleAdapter



View
Code

5.使用BaseAdapter

BaseAdapter要实现 以下方法:

getCount():方法返回控制该Adapter将会包含多少个列表项

getItem(int position): 该方法的返回值决定第Position处的列表项的内容

getItemId(int position): 该方法的返回值决定第Position处的列表项的内容的ID

getView(int position,View conerView ,ViewGroup parent)

这个方法绝决返回值第posistion处的列表项

5.1.创建一个学生信息录入,使用ListView展示信息baseAdapter





布局


View
Code

ListView要使用的布局


View
Code

数据库创建类


View
Code

实体类


View
Code

数据库工具类


View
Code

Activity

/**

* 学生管理信息系统Activity


View
Code

6.GridView与ExpandableListView

GridView:和ListView有共同的父类,都是AbsListView,与ListView很相似

区别:ListView只显示一列

GridView可以显示多列

numcolumns:属性可以设置显示列数

其它用法与ListView一样

7.Spinner

Spinner其实就是一个列表选择框,弹出一个菜单提供用户选择,

也需要设置Adapter

entries:使用XML资源文件数据设置下拉菜单

pupupBackground:列表 选择框的背景色

prompt:提示信息



7.1 xml

<?xml version="1.0" encoding="utf-8"?>

<resources>

<string-array name="books">

<item>疯狂JAVA讲义</item>

<item>Android</item>

<item>JAVA EE企业应用</item>

<item>Android 第一行代码</item>

</string-array>

</resources>



7.2 Avtivity

/**

* Spinner实现

* 设置适配器

* @author  刘楠

*/

public class MainActivity extends AppCompatActivity {

//Spinner

private Spinner spinner;

private String [] names={"东邪","西毒","南帝","北丐","中神通"};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

spinner = (Spinner) findViewById(R.id.spinner);

//设置适配器

ArrayAdapter<String> arrayAdapter

= new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,names);

spinner.setAdapter(arrayAdapter);

}

}




<?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"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context="com.itheima.spinner.MainActivity">

<!--

第一个Spinner使用entries配置XML资源

-->

<Spinner

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:entries="@array/books">

</Spinner>

<!--

第二个没有配置,

在Activity中设置Adapter

-->

<Spinner

android:id="@+id/spinner"

android:layout_width="match_parent"

android:layout_height="wrap_content">

</Spinner>

</LinearLayout>


8.AdapterViewFlipper的功能与用法

AdapterViewFlipper继承了AdapterViewAnimator,它也会显示Adapter提供的多个级件,但它每次只能显示一个View组件,程序可以通过showPrevious()和showNext()方法控制显示上一个,下一个,

使用startFlipper()控件自动播放

stopFlipper()停止播放

8.1属性:

animateFirstView:第一个View是否使用动画

inAnimation:显示时使用动画

loopViews:循环到最后一个时,是否自动转头到第一个

outAanimation:设置组件隐藏时使用的动画

autoStrat()是否自动播放

flipInterval():设置自动播放的时间

8.2自动播放图片



布局文件

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout

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:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context="com.itheima.adapterviewflipper.MainActivity">

<!--

flipInterval 5秒显示时间

layout_alignParentTop与父窗体顶部对齐

-->

<AdapterViewFlipper

android:id="@+id/flipper"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_alignParentTop="true"

android:flipInterval="5000"/>

<Button

android:layout_alignParentBottom="true"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="prev"

android:text="上一个"/>

<Button

android:layout_alignParentBottom="true"

android:layout_centerHorizontal="true"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="auto"

android:text="自动播放"/>

<Button

android:layout_alignParentRight="true"

android:layout_alignParentBottom="true"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="next"

android:text="下一个"/>

</RelativeLayout>

Adapter填充的XML布局文件

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

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

android:layout_width="match_parent"

android:layout_height="match_parent">

<ImageView

android:id="@+id/iv_display"

android:layout_width="match_parent"

android:layout_height="match_parent">

</ImageView>

</LinearLayout>


Activity实现

/**

* AdapterViewFlipper

* 步骤1.获取flipper

* 2.创建资源与适配器

* 3.为flipper设置适配器

*

* @author 刘楠

*/

public class MainActivity extends AppCompatActivity {

/*

flipper

*/

private AdapterViewFlipper flipper;

/*

资源图片

*/

private int[] imageIds = new int[]

{

R.drawable.shuangzi, R.drawable.shuangyu,

R.drawable.chunv, R.drawable.tiancheng, R.drawable.tianxie,

R.drawable.sheshou, R.drawable.juxie, R.drawable.shuiping,

R.drawable.shizi, R.drawable.baiyang, R.drawable.jinniu,

R.drawable.mojie};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

flipper = (AdapterViewFlipper) findViewById(R.id.flipper);

//声明适配器

BaseAdapter baseAdapter = new BaseAdapter() {

@Override

public int getCount() {

return imageIds.length;

}

@Override

public Object getItem(int position) {

return position;

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

View view;

if (convertView == null) {

view = View.inflate(MainActivity.this, R.layout.images, null);

} else {

view = convertView;

}

ImageView display = (ImageView) view.findViewById(R.id.iv_display);

//设置图片资源

display.setImageResource(imageIds[position]);

//设置ImageView的缩放类型

display.setScaleType(ImageView.ScaleType.FIT_XY);

return view;

}

};

//设置适配器

flipper.setAdapter(baseAdapter);

}

/**

* 上一张

*

* @param v

*/

public void prev(View v) {

flipper.showPrevious();

flipper.stopFlipping();

}

/**

* 自动播放

*

* @param v

*/

public void auto(View v) {

flipper.startFlipping();

}

/**

* 下一张

*

* @param v

*/

public void next(View v) {

flipper.showNext();

flipper.stopFlipping();

}

}


9.StackView功能与用法



StackView也是AdapterViewAnimator的子类

它也是用于显示Adapter提供的一系列View的.StackView将会心堆叠Stack的方式来显示多个列表项

拖走StackView中处于顶端的View,下一View将会显示出来,将上一个View拖进StackView,将进显示 出来

showNext(),show()Previous()控制显示下一个与上一个

9.1布局

<?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="horizontal"

tools:context="com.itheima.stackview.MainActivity">

<StackView

android:id="@+id/stackView"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:loopViews="true">

</StackView>

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

<Button

android:onClick="prev"

android:text="上一个"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

<Button

android:onClick="next"

android:text="下一个"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

</LinearLayout>

</LinearLayout>


填充XML

<?xml version="1.0" encoding="utf-8"?>

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

android:layout_width="match_parent"

android:layout_height="match_parent">

<ImageView

android:id="@+id/iv_display"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

</LinearLayout>


9.2 实现



/**

* StackView

* 步骤

* 1.获取stackview

* 2.建立适配器与资源

* 3.设置适配器

*/

public class MainActivity extends AppCompatActivity {

private StackView stackView;

private int[] imageIds = new int[]

{

R.drawable.bomb5, R.drawable.bomb6, R.drawable.bomb7

, R.drawable.bomb8, R.drawable.bomb9, R.drawable.bomb10

, R.drawable.bomb11, R.drawable.bomb12, R.drawable.bomb13

, R.drawable.bomb14, R.drawable.bomb15, R.drawable.bomb16

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

stackView = (StackView) findViewById(R.id.stackView);

/*

数据集合

*/

List<Map<String, Object>> listItem = new ArrayList<Map<String, Object>>();

for (int i = 0; i < imageIds.length; i++) {

Map<String, Object> map = new HashMap<String, Object>();

map.put("image", imageIds[i]);

listItem.add(map);

}

SimpleAdapter simpleAdapter =

new SimpleAdapter(this, listItem, R.layout.images, new String[]{"image"}, new int[]{R.id.iv_display});

//设置适配器

stackView.setAdapter(simpleAdapter);

}

/**

* 上一个

*/

public void prev(View v){

stackView.showPrevious();

}

/**

* 下一个

*/

public void next(View v){

stackView.showNext();

}

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: