安卓第六天笔记--ListView
2016-03-06 00:22
417 查看
安卓第六天笔记--ListView
安卓第六天笔记--ListView
1.AdapteView
AdapteView 继承ViewGroup它的本质是容器AdapterView派生了3个子类:
AbsListView
AbsSpinner
AdapterViewAnimation
这3个类是抽象类
实际使用中采用的是它们的子类
![](http://images2015.cnblogs.com/blog/710715/201602/710715-20160221215824936-2137215062.png)
2.Adpate结构
![](http://images2015.cnblogs.com/blog/710715/201602/710715-20160221215814326-1523752075.png)
3.使用ArrayAdapter完成ListView显示
![](http://images2015.cnblogs.com/blog/710715/201602/710715-20160221215753326-457655167.png)
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[]类型的参数决定填充哪些控件
![](http://images2015.cnblogs.com/blog/710715/201602/710715-20160221215702358-1950405876.png)
布局文件:
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
View
Code
listview填充的布局文件
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
View
Code
Activity中SimpleAdapter
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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
![](http://images2015.cnblogs.com/blog/710715/201602/710715-20160221215531842-1658878888.png)
![](http://images2015.cnblogs.com/blog/710715/201602/710715-20160221215544655-1275751090.png)
布局
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
View
Code
ListView要使用的布局
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
View
Code
数据库创建类
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
View
Code
实体类
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
View
Code
数据库工具类
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
View
Code
Activity
/**
* 学生管理信息系统Activity
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
View
Code
6.GridView与ExpandableListView
GridView:和ListView有共同的父类,都是AbsListView,与ListView很相似区别:ListView只显示一列
GridView可以显示多列
numcolumns:属性可以设置显示列数
其它用法与ListView一样
7.Spinner
Spinner其实就是一个列表选择框,弹出一个菜单提供用户选择,也需要设置Adapter
entries:使用XML资源文件数据设置下拉菜单
pupupBackground:列表 选择框的背景色
prompt:提示信息
![](http://images2015.cnblogs.com/blog/710715/201602/710715-20160221215101670-522819040.png)
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自动播放图片
![](http://images2015.cnblogs.com/blog/710715/201602/710715-20160221214931639-1138736446.png)
布局文件
<?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功能与用法
![](http://images2015.cnblogs.com/blog/710715/201602/710715-20160221214659201-1677470412.png)
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(); } }
相关文章推荐
- Linux Swap交换分区介绍总结
- ansible的用法
- 浏览器缓存--阅读笔记
- ASIHttpRequest或者SDWebImage给UIImageView加载图片的逻辑是什么样子的
- Material Design学习之NavigationView实现侧滑菜单栏
- 纯CSS实现移动端常见布局——高度和宽度挂钩的秘密
- 使用drawRect有什么影响
- 封装getByClass(JS获取class的方法封装为一个函数)
- 封装getStyle (获取样式currentStyle getComputedStyle兼容处理)
- 封装addLoadEvent(页面加载同时执行多个函数)
- JS 取消冒泡事件 兼容火狐IE
- javascript处理事件的一些兼容写法
- Bone Collector II (HDU_2639) 01背包 + 第K优解
- ARM体系结构——如何在MDK上仿真
- 如何高性能的给UIImageView加个圆角
- 文章标题
- 20145218《Java程序设计》第一周学习总结
- 图片延迟加载
- insertAfter()
- js 获取url的get传值函数