安卓初学四之控件初步(三)
2016-03-05 21:54
435 查看
(六)ListView列表控件
ListView是用来表示列表的控件,使用时需要和适配器一起使用。(1)ListView
<ListView android:id="@+id/listView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" > </ListView>
(2)适配器
把复杂的数据填充在制定视图界面上。本次学习了两个适配器i)ArrayAdapter 绑定格式单一的数据,数据源可以使集合或者数组
ii)SimpleAdapter 绑定复杂的数据,数据源:只鞥是特定泛型的集合
(3)使用ArrayAdapter
package com.example.listviewdemo; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; public class MainActivity extends ActionBarActivity implements OnItemClickListener,OnScrollListener { private ListView lv; //private ArrayAdapter<String> arr; private SimpleAdapter sim_adapter; private List<Map<String,Object>>dataList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /**数组适配器,用于纯文字的ListView * ArrayAdapter(上下文,列表用的布局文件,数据源) */ //1.新建一个数组适配器
lv=(ListView) findViewById(R.id.listView1); String []str={"第一个","第二个","第三个","第四个","第五个"};//手动建立一个数据源
<span style="white-space:pre"></span><pre name="code" class="java"><span style="white-space:pre"> </span>//2.适配器加载数据源arr=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,str);
<span style="white-space:pre"> </span>//3.试图加载适配器 lv.setAdapter(arr);
<span style="white-space:pre"></span>
<span style="white-space:pre"> </span>}
}
(4)使用SimpleAdapter
package com.example.listviewdemo; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; public class MainActivity extends ActionBarActivity implements OnItemClickListener,OnScrollListener { private ListView lv; private SimpleAdapter sim_adapter; private List<Map<String,Object>>dataList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /** * SimpleAdapter(context, data, resource, from, to) * context:上下文 * data:数据源(List<? extends Map<String ,?>> data)一个Map所组成的List集合 * 每一个Map都会去对应ListView列表中的一行 * 每一个Map(键—值对)中的键必须包含所有在from中所指定的键 * resource:列表的布局文件ID * from:Map中的键名 * to:绑定数据视图中的ID,与from城对应关系 */ dataList=new ArrayList<Map<String,Object>>(); lv=(ListView) findViewById(R.id.listView1); sim_adapter=new SimpleAdapter(MainActivity.this, getData(), R.layout.item, new String[]{"pic","text"}, new int[]{R.id.pic,R.id.text}); lv.setAdapter(sim_adapter); lv.setOnItemClickListener(this); lv.setOnScrollListener(this); } private List<Map<String,Object>>getData(){ for(int i=0;i<20;i++){ Map<String,Object> map=new HashMap<String,Object>(); map.put("pic", R.drawable.ic_launcher); map.put("text", "适配器"+i); dataList.add(map); } return dataList; }
}
列表的布局文件的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" android:orientation="horizontal" > <ImageView android:id="@+id/pic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="15dp" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="30sp" android:text="demo" android:textColor="#FF0000" /> </LinearLayout>
<span style="white-space:pre"> </span><img src="https://img-blog.csdn.net/20160305223954075?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="图片" />
(4)ListView的三个函数
@Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { /** * firstVisibleItem 表示在当前屏幕显示的第一个listItem在整个listView里面的位置(下标从0开始) * visibleItemCount表示在现时屏幕可以见到的ListItem(部分显示的ListItem也算)总数 * totalItemCount表示ListView的ListItem总数 * listView.getLastVisiblePosition()表示在现时屏幕最后一个ListItem * (最后ListItem要完全显示出来才算)在整个ListView的位置(下标从0开始) */ } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub switch(scrollState){ case SCROLL_STATE_FLING: Log.i("main", "用户手指离开屏幕之前用力划了一下,试图人在因惯性华滑动"); Map<String,Object> map=new HashMap<String,Object>(); map.put("pic", R.drawable.ic_launcher); map.put("text", "正在刷新"); dataList.add(map); sim_adapter.notifyDataSetChanged();//刷新一下UI线程,让改变的东西出现 break; case SCROLL_STATE_IDLE: Log.i("mian", "视图已经停止滑动了"); break; case SCROLL_STATE_TOUCH_SCROLL: Log.i("main", "手指没有离开屏幕,视图正在滑动"); break; } } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long arg3) { // TODO Auto-generated method stub String str=lv.getItemAtPosition(position)+""; Toast.makeText(this, "position="+position+" text="+str, Toast.LENGTH_SHORT).show(); }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories