1、简介
ListView通过设置适配器,把数据源罗列到界面上展示。当设置事件点击的监听后,就可以获取到ListView的item对象,从而获取到item里面的子控件对象,然后对子控件进行操作。
过程如下图:
2、ListView的继承关系
java.lang.Object
|
android.view.View
|
android.view.ViewGroup
|
android.widget.AdapterView<Textends android.widget.Adapter>
|
android.widget.AbsListView
3、适配器
(1)Adapter
|
BaseAdapter
|
—ArrayAdapter
—SimpleAdapter
—CursorAdapter
|
ResourceCursorAdapter
|
SimpleCursorAdapter
(2)另外自定义的Adapter就是继承某个Adapter然后重新父类的方法4、示例效果如下:
这里demo主要是自定义了一个Adapter,然后在Adapter里面设置控件的监听事件并且回调到主Activity里面执行。
1、工程目录如下:
2、MainActivity.java的内容如下
<span style="font-size:18px;">package com.yuyang.listviewdemo;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageButton;
import android.widget.ListView;
import com.yuyang.modle.Room;
import java.util.ArrayList;
import java.util.List;
/**
* Created by suqiongbang on 2016-06-22.
*/
public class MainActivity extends Activity {
public ListView listView;
public MyListAdapter myAdapter;
public List<Room> roomList;
public ImageButton oldImgBt1,oldImgBt2,oldImgBt3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.lv);
initRoom();
myAdapter = new MyListAdapter(this,this,roomList);
listView.setAdapter(myAdapter);
}
public void initRoom(){
roomList = new ArrayList<Room>();
for(int i=0 ; i<10; i++){
roomList.add(new Room());
}
}
public void clickEvent(int viewId,ImageButton thisBt){
switch (viewId){
case R.id.ib1:
if(oldImgBt1 != null){
oldImgBt1.setImageResource(R.drawable.noone);
}
thisBt.setImageResource(R.drawable.mark_5);
oldImgBt1 = thisBt;
break;
case R.id.ib2:
if(oldImgBt2 != null){
oldImgBt2.setImageResource(R.drawable.noone);
}
thisBt.setImageResource(R.drawable.mark_6);
oldImgBt2 = thisBt;
break;
case R.id.ib3:
if(oldImgBt3 != null){
oldImgBt3.setImageResource(R.drawable.showready);
}
thisBt.setImageResource(R.drawable.showcancel);
oldImgBt3 = thisBt;
break;
}
}
}</span>
3、MyListAdapter.java的内容如下:
<span style="font-size:18px;"><span style="font-size:14px;">package com.yuyang.listviewdemo;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import com.yuyang.modle.Room;
import java.util.List;
/**
* Created by suqiongbang on 2016-06-22.
*/
public class MyListAdapter extends BaseAdapter{
public Context context;
public MainActivity callbak;
public List<Room> roomList;
public LayoutInflater mInflater;
public MyListAdapter(Context context,MainActivity callback, List<Room> rooms) {
this.context = context;
this.callbak = callback;
this.roomList = rooms;
}
@Override
public int getCount() {
return roomList.size();
}
@Override
public Object getItem(int position) {
return roomList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Room room = new Room();
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = null;
ViewHolder viewHolder = null;
if(convertView == null){
viewHolder = new ViewHolder();
view = mInflater.inflate(R.layout.item,null);
viewHolder.imgB1 = (ImageButton) view.findViewById(R.id.ib1);
viewHolder.imgV = (ImageView) view.findViewById(R.id.iv);
viewHolder.imgB2 = (ImageButton) view.findViewById(R.id.ib2);
viewHolder.imgB3 = (ImageButton) view.findViewById(R.id.ib3);
view.setTag(viewHolder);
}
else{
view = convertView;
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.imgB1.setImageResource(R.drawable.noone);
viewHolder.imgV.setImageResource(R.drawable.table);
viewHolder.imgB2.setImageResource(R.drawable.noone);
viewHolder.imgB3.setImageResource(R.drawable.showready);
viewHolder.imgB1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
callbak.clickEvent(v.getId(),(ImageButton)v);
}
});
viewHolder.imgB2.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
callbak.clickEvent(v.getId(),(ImageButton)v);
}
});
viewHolder.imgB3.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
callbak.clickEvent(v.getId(),(ImageButton)v);
}
});
return view;
}
class ViewHolder{
public ImageButton imgB1;
public ImageView imgV;
public ImageButton imgB2;
public ImageButton imgB3;
}
}</span>
4、Room.java的内容如下:
<span style="font-size:18px;">package com.yuyang.modle;
/**
* Created by suqiongbang on 2016-06-22.
*/
public class Room {
private String name1;
private String name2;
private int mark1;
private int mark2;
public String getName1() {
return name1;
}
public String getName2() {
return name2;
}
public int getMark1() {
return mark1;
}
public int getMark2() {
return mark2;
}
public void setMark2(int mark2) {
this.mark2 = mark2;
}
public void setName1(String name1) {
this.name1 = name1;
}
public void setName2(String name2) {
this.name2 = name2;
}
public void setMark1(int mark1) {
this.mark1 = mark1;
}
}</span>
5、布局activity_main.xml
<span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<ListView
android:id="@+id/lv"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ListView>
</RelativeLayout></span>
6、布局item.xml
<span style="font-size:14px;"><?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"> <ImageButton android:id="@+id/ib1" android:scaleType="fitCenter" android:layout_width="60dp" android:layout_height="60dp" /> <ImageView android:id="@+id/iv" android:layout_toRightOf="@id/ib1" android:layout_width="60dp" android:layout_height="60dp" /> <ImageButton android:id="@+id/ib2" android:scaleType="fitCenter" android:layout_toRightOf="@id/iv" android:layout_width="60dp" android:layout_height="60dp" /> <ImageButton android:id="@+id/ib3" android:scaleType="fitCenter" android:layout_alignParentRight="true" android:layout_width="100dp" android:layout_height="60dp" /> </RelativeLayout></span><span style="font-size: 12pt;"> </span>
源码下载:http://download.csdn.net/detail/sq_bang/9556327
记录:ListView的属性及方法详细内容在这个博客:http://www.cnblogs.com/over140/archive/2011/06/07/2074019.html