Android控件ListView
2016-04-23 22:28
453 查看
listview的使用
ListView :用来在界面上显示数据列表。ListView 原理
MVC:
Model Person
View ListView
Controle Adapter 数据适配器
使用listview显示数据列表的步骤:
1、在布局文件中添加一个listview控件
2、在代码中找到这个listview控件
3、创建一个数据适配器为listview填充数据
三种数据适配器
BaseAdapter
ListView lv = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取ListView控件 lv = (ListView)findViewById(R.id.lv); //设置适配器 lv.setAdapter(new MyListAdapter()); } public class MyListAdapter extends BaseAdapter{ //返回要显示的总条目数量 public int getCount() { // TODO Auto-generated method stub return 600; } //返回该位置的条目对象 public Object getItem(int position) { // TODO Auto-generated method stub return null; } //返回该位置的条目id public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub TextView tv = null; if(null == convertView)//没有旧的条目可用则创建新的条目 { tv = new TextView(MainActivity.this); System.out.println("convertview null" + position); } else {//有旧的条目被隐藏则重新使用旧的条目显示数据 tv = (TextView) convertView; System.out.println("复用旧的" + position); } tv.setText("test"+position); tv.setTextSize(50); return tv; } }
ArrayAdapter
使用ArrayAdapter为listview填充数据的步骤:1、在布局文件中添加ListView
2、在代码中得到这个listview控件
3、调用listview.setAdapter()填充数据
//使用适配器为listview填充数据
//new ArrayAdapter:context 上下文,resourceId 条目布局文件的资源ID,object[] 要显示的数据
lv.setAdapter(new ArrayAdapter<String>(this, R.layout.item, new String[]{"王菲","谢霆锋","张柏芝","李亚鹏"}));
SimpleAdapter
使用ArrayAdapter为listview填充数据的步骤:1、在布局文件中添加ListView
2、在代码中初始化这个listview控件
3、调用listview.setAdapter()填充数据
/** * context 上下文 * data list 包含map * resource item 布局文件 * from 就是我们map集合中存的key * to item 布局中定义的控件的id * */ List<Map<String, String>> data = new ArrayList<Map<String,String>>(); Map<String, String> map1 = new HashMap<String, String>(); map1.put("name", "张飞"); map1.put("phone", "138888"); Map<String, String> map2 = new HashMap<String, String>(); map2.put("name", "赵云"); map2.put("phone", "110"); Map<String, String> map3 = new HashMap<String, String>(); map3.put("name", "曹操"); map3.put("phone", "1900"); Map<String, String> map4 = new HashMap<String, String>(); map4.put("name", "貂蝉"); map4.put("phone", "114"); // 把map存到 list集合 data.add(map1); data.add(map2); data.add(map3); data.add(map4); //设置listview的数据适配器 lv.setAdapter(new SimpleAdapter(getApplicationContext(), data, R.layout.item, new String[]{"name","phone"}, new int[]{R.id.tv_name,R.id.tv_phone}));
条目的布局文件:
<?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" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tv_id"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tv_name"
/>
</LinearLayout>
复杂ListView条目的显示
步骤:1、在布局文件中添加ListView
2、在代码中初始化这个listview控件
lv = (ListView) findViewById(R.id.lv);
3、自定义数据适配器,继承了BaseAdapter,getView中我们不是简单的返回TextView,我们可以用布局文件来显示更复杂的条目
4、调用lv.setAdapter(new MyAdapter())填充数据
public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View v; if (null == convertView) { //用布局填充器从条目布局文件获取ListView条目显示的View v = View.inflate(MainActivity.this, R.layout.lv_item, null); } else { v = convertView; } //从条目布局中获取相应的控件 ImageView iv = (ImageView) v.findViewById(R.id.ivicon); iv.setImageResource(R.drawable.ic_launcher); TextView lv1 = (TextView) v.findViewById(R.id.tvtitle); lv1.setText("标题"+position); TextView lv2 = (TextView) v.findViewById(R.id.tvcontent); lv2.setText("内容"+position); return v; }
条目布局文件lv_item
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/ivicon" android:layout_width="70dp" android:layout_height="70dp" /> <TextView android:id="@+id/tvtitle" android:layout_toRightOf="@id/ivicon" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/tvcontent" android:layout_marginTop="10dp" android:layout_toRightOf="@id/ivicon" android:layout_below="@id/tvtitle" android:layout_width="match_parent" android:layout_height="wrap_content" /> </RelativeLayout>
其中,布局填充器的获得共有三种方式:这三种都可以,
//1种 写法 获取 布局填充器 //view = View.inflate(MainActivity.this, R.layout.item, null); //2 种方法获取布局填充 //view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item,null); //3种写法 利用系统给我们提供的一个服务 LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); view = inflater.inflate(R.layout.item, null);
相关文章推荐
- 完美实现Android ListView中的TextView的跑马灯效果
- android上改变listView的选中颜色
- Delphi7中Listview的常用功能汇总
- Delphi控件ListView的属性及使用方法详解
- android中ListView数据刷新时的同步方法
- Android提高之ListView实现自适应表格的方法
- Android中实现水平滑动(横向滑动)ListView示例
- C#实现ListView选中项向上或向下移动的方法
- Listview加载的性能优化是如何实现的
- C#实现listview Group收缩扩展的方法
- C# listview添加combobox到单元格的实现代码
- ListView 百分比进度条(delphi版)
- Android listview多视图嵌套多视图
- ListView Adapter优化 实例
- Android用ListView显示SDCard文件列表的小例子
- Adapter实现ListView带多选框等状态的自定义控件的注意事项
- asp.net ListView 数据绑定
- Android之ScrollView嵌套ListView和GridView冲突的解决方法
- android ListView和ProgressBar(进度条控件)的使用方法
- Android实现ListView异步加载图片的方法