您的位置:首页 > 移动开发 > Android开发

Android开发具体解释之ListView具体解释一

2016-03-25 09:49 393 查看
列表ListView介绍和实例

1.ListView -- ListActivity -- ListAdapter

2.ArrayAdapter结合ListView进行显示

3.SimpleAdapter结合ListView进行显示

4.处理单击ListView事件,处理选择ListView的事件

5.使用SimpleCursorAdapter与ListView进行关联

ListView :

要让一个ListView显示出来须要的3个条件:

1.ListView --- 须要被显示的列表

2.Data --- 和ListView绑定的数据,通常是一个Cursor或字符串数组

3.ListAdapter --- data和ListView的桥梁 --- 适配作用

经常使用ListAdapter子类:

ArrayAdapter --- 数组适配 ---- ListAdapter的直接子类

ArrayList<类型>(context,int itemLayout, data)

context:上下文环境

itemLayout:自己定义的每一项要显示的Layout

data:要显示的数据

样例:

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

android.R.layout.simple_list_item_1 --- 使用Android自带的 每一项Listview显示布局 -- 实际应用中经常自己定义此item布局

特别注意:itemLayout --- ListView中每一项(行)的布局 --- 能够引用系统自带的,但 实际项目中很多其它是使用自己定义的item布局

系统自带的经常使用item布局:

android.R.layout.simple_list_item_1 ----- 每一项仅仅有一个TextView

android.R.layout.simple_list_item_1 ----- 每一项仅仅有两个TextView

android.R.layout.simple_list_item_single_choice ----- 每一项有一个TextView。但这一项能够被选择

SimpleAdapter --- 简单适配 ---- ListAdapter的直接子类

通过SimpleAdapter能够让ListView其中的每一项内容更加个性化,

通常将ListView中某项的布局信息写在XML文件里。这个布局文件通过R.layout.XX -- 引入到ListView中

SimpleAdapter是ArrayList和Listview之间的桥梁

ArrayList中的每一项都是一个Map<String,?>类型。

ArrayList其中的每一项Map对象都和ListView其中的一项进行数据绑定和一一相应

SimpleAdapter的构造器:

public SimpleAdapterK(Context context, List<? extends Map<String,?

>> data, int resource, String[] from , int[] to)

context -- 上下文

data -- 基于Map的List,Data里面的每一项都和ListIView里的每一项相应。Data里面的每一项都是Map类型。

这个Map类中包括了ListView每一行须要的数据 --- 经常使用 data = new ArrayList<Map<String,Object>>();

resource -- 一个layout, 必须包括在to中出现的那些View,系统提供或自己定义layout布局都可。

系统提供的有:android.R.layout.simpe_list_item_single_choice

android.R.layout.two_line_list_item

from -- 数组名,每个名字是为了在ArrayList中的每个item中索引Map<String, Object>的Object用的

to -- 这里面是一个TextView的数组。这些TextView以id形式表示。这鞋View必须是TextView

为ListView中的每一项加入事件处理: OnItemClickListener

OnItemClickListener listener = new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View view, int position,

long id) {

setTitle(parent.getItemAtPosition(position).toString());

}

};

listView.setOnItemClickListener(listener);

说明:

onItemClick -- 回调函数。当用户单击ListView每一项时。自己主动运行

parent --- 被单击的ListView

view --- 用户操作的那一项

position --- 操作的item项在ListView中的位置

id --- 被选中的那一行的id

getItemAtPosition(position) --- 通过position获得和这一行绑定的数据, 本例中仅仅是把改行内容作为title写出来

listView.setOnItemClickListener(listener) --- 将监听器注冊到ListView中

实例代码:

ArrayAdapter与ListView

package com.example.androidbasicdemo1;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;

/**
* ArrayList<类型>(context,int itemLayout, data)
* context:上下文环境
* itemLayout:自己定义的每一项要显示的Layout
* data:要显示的数据
*
* 样例:
* ArrayAdapter<String> adapter = new ArrayAdapter<String>(ArrayAdapterListViewActivity.this, android.R.layout.simple_list_item_1, data);
android.R.layout.simple_list_item_1  --- 使用Android自带的 每一项Listview显示布局   -- 实际应用中经常自己定义此item布局

* @author JayHe
*
*/
public class ArrayAdapterListViewActivity extends Activity {

private ListView listView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_array_adapter_list_view);

//从xml布局文件里获得ListView对象
listView = (ListView) findViewById(R.id.arrayadapterlistView1);

//定义要显示的数据
String[] data = getResources().getStringArray(R.array.items_country);
//定义适配器
ArrayAdapter<String> adapter = new ArrayAdapter<String>(ArrayAdapterListViewActivity.this, android.R.layout.simple_list_item_1, data);

//为ListView加入适配器
listView.setAdapter(adapter);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.array_adapter_list_view, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}

}


SimpleAdapter与ListView

package com.example.androidbasicdemo1;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class SimpleAdapterListViewActivity extends Activity {

private List<Map<String, Object>> data;

private ListView listView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple_adapter_list_view);

listView = (ListView) findViewById(R.id.simpleadapterlistView1);

SimpleAdapter adapter = new SimpleAdapter(SimpleAdapterListViewActivity.this, prepareData(), R.layout.slef_list_item1,new String[]{"姓名","性别"}, new int[]{R.id.selflistview1textView1,R.id.selflistview1textView2});

listView.setAdapter(adapter);

OnItemClickListener listener = new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
setTitle(parent.getItemAtPosition(position).toString());
}
};

listView.setOnItemClickListener(listener);

}

private List<Map<String, Object>> prepareData(){
data = new ArrayList<Map<String, Object>>();
Map<String, Object> item;
item = new HashMap<String, Object>();
item.put("姓名", "吴欢小盆友");
item.put("性别", "女");
data.add(item);
item = new HashMap<String, Object>();
item.put("姓名", "冯荣小朋友");
item.put("性别", "女");
data.add(item);
item = new HashMap<String, Object>();
item.put("姓名", "夏明");
item.put("性别", "男");
data.add(item);
item = new HashMap<String, Object>();
item.put("姓名", "小华");
item.put("性别", "男");
data.add(item);
return data;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.simple_adapter_list_view, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}

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