您的位置:首页 > 产品设计 > UI/UE

Android UI系统控件进阶(一)之列表控件ListView详解

2014-11-28 13:51 477 查看
ListVeiw 源代码下载:点击打开链接

列表控件ListView

列表控件ListViewListView是一种用于垂直显示的列表控件,其类的继承结构如下:



ListView是比较常用的组件,它以列表的形式展示具体内容,如果ListView控件显示内容过多,则会出现垂直滚动条,并且它能够根据数据的长度自适应显示。列表的显示需要三个元素:

1.ListVeiw 用来展示列表的View。

2.适配器用来把数据映射到ListView上的中介。

3.数据,指被映射的字符串、图片或者基本组件。根据列表的适配器类型,列表分为三种,ArrayAdapterSimpleAdapterSimpleCursorAdapter

ListView支持点击事件处理,用户可以用少量的代码实现复杂的选择功能。在布局文件中,用XML描述的ListView控件,代码如下:



ListView是一个经常用到的控件,ListView里面的每个子项Item可以使一个字符串,也可以是一个组合控件。先说说ListView的实现:

1.准备ListView要显示的数据

2.使用 一维或多维 动态数组 保存数据;

3.构建适配器 , 简单地来说, 适配器就是 Item数组 动态数组 有多少元素就生成多少个Item;

4.把 适配器 添加到ListView,并显示出来。
适配器:

说道ListView就不得不说Adapter适配器,因为只有通过Adapter才可以把列表中的数据映射到ListView中,Android中Adapter可以这么理解的,是数据和视图之间的桥梁,数据在adapter中做处理,然后显示到视图上面。在android的开发中最Adapter
一共可以分为:

1.ArrayAdapter,

2.BaseAdapter,

3.CursorAdapter,

4.HeaderViewListAdapter,

5.ResourceCursorAdapter,

6.SimpleAdapter,

7.SimpleCursorAdapter,

8.WrapperListAdapter

ListView开发中:ArrayAdapter,SimpleAdapter和SimpleCursorAdapter

ArrayAdapter它只能用于显示文字。

SimpleAdapter:它的功能非常强大。可以通过它自定义ListView中的item的内容,比如图片、多选框等。

SimpleCursorAdapter:在许多时候需要将数据库表中的数据显示在ListView、Gallery等组件中。虽然可以直接使用Adapter对象处理,但工作量很大。为此,Android
SDK提供了一个专用于数据绑定的Adapter类:SimpleCursorAdapter。

以下是一个简单的例子:

[b]ArrayAdapter:

[/b]

[b]


[/b]

public class MyListView extends Activity {

private ListView listView;

//private List<String> data = new ArrayList<String>();

@Override

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

listView = new ListView(this);

listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,getData()));

setContentView(listView);

}

private List<String> getData(){

List<String> data = new ArrayList<String>();

data.add("漩涡鸣人");

data.add("宇智波止水");

data.add("黑崎一护");

data.add("波风水门");

data.add("奈良鹿丸");

data.add("山中井野");

return data;

}

}

SimpleAdapter

例1



public class MyListView3 extends ListActivity {

// private List<String> data = new ArrayList<String>();

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

SimpleAdapter adapter = new SimpleAdapter(this,getData(),R.layout.vlist,

new String[]{"title","info","img"},

new int[]{R.id.title,R.id.info,R.id.img});

setListAdapter(adapter);

}

private List<Map<String, Object>> getData() {

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

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

map.put("title", "火影");

map.put("info", "漩涡鸣人");

map.put("img", R.drawable.i1);

list.add(map);

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

map.put("title", "死神");

map.put("info", "黑崎一护");

map.put("img", R.drawable.i2);

list.add(map);

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

map.put("title", "海贼王");

map.put("info", "索隆");

map.put("img", R.drawable.i3);

list.add(map);

return list;

}

}

例2:



public class MyListView4 extends ListActivity {

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

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

mData = getData();

MyAdapter adapter = new MyAdapter(this);

setListAdapter(adapter);

}

private List<Map<String, Object>> getData() {

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

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

map.put("title", "火影");

map.put("info", "漩涡鸣人");

map.put("img", R.drawable.i1);

list.add(map);

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

map.put("title", "死神");

map.put("info", "黑崎一护");

map.put("img", R.drawable.i2);

list.add(map);

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

map.put("title", "海贼王");

map.put("info", "索隆");

map.put("img", R.drawable.i3);

list.add(map);

return list;

}

// ListView 贺 羽昌

@Override

protected void onListItemClick(ListView l, View v, int position, long id) {

Log.v("MyListView4-click", (String)mData.get(position).get("title"));

}

/**

* listview

*/

public void showInfo(){

new AlertDialog.Builder(this)

.setTitle("贺 羽昌listview")

.setMessage("羽哥...")

.setPositiveButton("羽哥", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

}

})

.show();

}

public final class ViewHolder{

public ImageView img;

public TextView title;

public TextView info;

public Button viewBtn;

}

public class MyAdapter extends BaseAdapter{

private LayoutInflater mInflater;

public MyAdapter(Context context){

this.mInflater = LayoutInflater.from(context);

}

@Override

public int getCount() {

// TODO Auto-generated method stub

return mData.size();

}

@Override

public Object getItem(int arg0) {

// TODO Auto-generated method stub

return null;

}

@Override

public long getItemId(int arg0) {

// TODO Auto-generated method stub

return 0;

}

@Override

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

ViewHolder holder = null;

if (convertView == null) {

holder=new ViewHolder();

convertView = mInflater.inflate(R.layout.vlist2, null);

holder.img = (ImageView)convertView.findViewById(R.id.img);

holder.title = (TextView)convertView.findViewById(R.id.title);

holder.info = (TextView)convertView.findViewById(R.id.info);

holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);

convertView.setTag(holder);

}else {

holder = (ViewHolder)convertView.getTag();

}

holder.img.setBackgroundResource((Integer)mData.get(position).get("img"));

holder.title.setText((String)mData.get(position).get("title"));

holder.info.setText((String)mData.get(position).get("info"));

holder.viewBtn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

showInfo();

}

});

return convertView;

}

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