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

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,SimpleAdapterSimpleCursorAdapter

ArrayAdapter它只能用于显示文字。

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

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

以下是一个简单的例子:

ArrayAdapter:


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;
}

}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值