1、定义简单的适配器形式。
首先定义一个Layout为listviewitem.xml. 里面有三个TextView。分别代表学号,姓名,班级。
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<LinearLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
android:id=
"@+id/cuslistViewItem"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"horizontal"
>
<TextView
android:id=
"@+id/textView1"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"TextView"
android:layout_marginLeft=
"10dp"
android:layout_marginBottom=
"10dp"
/>
<TextView
android:id=
"@+id/textView3"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"TextView"
android:layout_marginLeft=
"10dp"
android:layout_marginBottom=
"10dp"
/>
<TextView
android:id=
"@+id/textView2"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"TextView"
android:layout_marginLeft=
"10dp"
android:layout_marginBottom=
"10dp"
/>
</LinearLayout>
|
在activity_main.xml中放一个ListView控件,很简单,不解释。
<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:paddingBottom=
"@dimen/activity_vertical_margin"
android:paddingLeft=
"@dimen/activity_horizontal_margin"
android:paddingRight=
"@dimen/activity_horizontal_margin"
android:paddingTop=
"@dimen/activity_vertical_margin"
tools:context=
".MainActivity"
>
<TextView
android:id=
"@+id/textView1"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/hello_world"
/>
<ListView
android:id=
"@+id/listView1"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_alignParentLeft=
"true"
android:layout_below=
"@+id/textView1"
android:layout_marginTop=
"50dp"
>
</ListView>
</RelativeLayout>
|
然后建立数据源
public
class
MainActivity
extends
Activity {
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv = (ListView)
this
.findViewById(R.id.listView1);
ArrayList<HashMap<String,String>> listSource =
new
ArrayList<HashMap<String,String>>();
for
(
int
num=
1
; num<
10
; num++)
{
HashMap<String,String> map =
new
HashMap<String, String>();
map.put(
"num"
,String.valueOf(num));
map.put(
"name"
,
"stu"
+num );
map.put(
"className"
,
"software 2"
);
listSource.add(map);
}
SimpleAdapter mStuInfo =
new
SimpleAdapter(
this
,listSource,R.layout.listviewitem,
new
String[] {
"num"
,
"name"
,
"className"
},
new
int
[]{R.id.textView1, R.id.textView2, R.id.textView3});
lv.setAdapter(mStuInfo);
}
}
|
最后将listview绑定适配器的数据源。效果图如下图。
当然可以加入ItemClick事件。
lv.setOnItemClickListener(
new
ItemClickListener());
|
然后实现ItemClickListener。
class
ItemClickListener
implements
OnItemClickListener {
//arg2 is the position
//arg3 is row number
@Override
public
void
onItemClick(AdapterView<?> arg0, View arg1,
int
arg2,
long
arg3) {
// TODO Auto-generated method stub
HashMap<String, String> item=(HashMap<String, String>) arg0.getItemAtPosition(arg2);
Toast.makeText(MainActivity.
this
, item.get(
"name"
), Toast.LENGTH_LONG).show();
}
}
|
ListView和GridView在此用法是一样的。可以把ListView控件换成GridView控件。
二、下面采用新的适配器形式。将添加学生图片,并重新组织布局。效果如下图:
代码如下:
重新设计的listviewitem.xml.
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<RelativeLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
android:id=
"@+id/cuslistViewItem"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"horizontal"
>
<ImageView
android:id=
"@+id/imageView1"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"10dp"
android:layout_marginBottom=
"10dp"
/>
<TextView
android:id=
"@+id/textView1"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"TextView"
android:layout_toRightOf=
"@+id/imageView1"
android:layout_marginLeft=
"10dp"
android:layout_marginBottom=
"10dp"
/>
<TextView
android:id=
"@+id/textView2"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"TextView"
android:layout_toRightOf=
"@+id/textView1"
android:layout_marginLeft=
"10dp"
android:layout_marginBottom=
"10dp"
/>
<TextView
android:id=
"@+id/textView3"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"TextView"
android:layout_toRightOf=
"@+id/imageView1"
android:layout_below=
"@+id/textView1"
android:layout_marginLeft=
"10dp"
android:layout_marginBottom=
"30dp"
/>
</RelativeLayout>
|
重新的数据源。建立了MyListViewAdapter类继承BaseAdapter。
public
class
MainActivity
extends
Activity {
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv = (ListView)
this
.findViewById(R.id.listView1);
ArrayList<HashMap<String,String>> listSource =
new
ArrayList<HashMap<String,String>>();
for
(
int
num=
1
; num<
10
; num++)
{
HashMap<String,String> map =
new
HashMap<String, String>();
map.put(
"photo"
, String.valueOf(R.drawable.ic_launcher));
map.put(
"num"
,String.valueOf(num));
map.put(
"name"
,
"stu"
+num );
map.put(
"className"
,
"software 2"
);
listSource.add(map);
}
lv.setAdapter(
new
MyListViewAdapter(listSource));
}
public
class
MyListViewAdapter
extends
BaseAdapter{
View[] itemViews;
public
MyListViewAdapter(ArrayList<HashMap<String,String>> listSource)
{
itemViews =
new
View[listSource.size()];
Iterator<HashMap<String, String>> it = listSource.iterator();
HashMap<String,String> hash;
int
i =
0
;
try
{
while
(it.hasNext())
{
hash = it.next();
itemViews[i] = makeItemView(hash);
i++;
}
}
catch
(Exception e){
Log.e(
"Error"
, e.getMessage());
e.printStackTrace();
}
}
private
View makeItemView(HashMap<String,String> map) {
if
(map ==
null
|| map.isEmpty())
return
null
;
LayoutInflater inflater = (LayoutInflater) MainActivity.
this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// 使用View的对象itemView与R.layout.item关联
View itemView = inflater.inflate(R.layout.listviewitem,
null
);
TextView title = (TextView) itemView.findViewById(R.id.textView1);
title.setText(map.get(
"num"
));
Log.e(
"num"
, map.get(
"num"
));
TextView text = (TextView) itemView.findViewById(R.id.textView2);
text.setText(map.get(
"name"
));
Log.e(
"name"
, map.get(
"name"
));
TextView text2 = (TextView) itemView.findViewById(R.id.textView3);
text2.setText(map.get(
"className"
));
Log.e(
"className"
, map.get(
"className"
));
ImageView image = (ImageView) itemView.findViewById(R.id.imageView1);
image.setImageResource(Integer.parseInt(map.get(
"photo"
)));
Log.e(
"photo"
, map.get(
"photo"
));
return
itemView;
}
@Override
public
int
getCount() {
// TODO Auto-generated method stub
return
itemViews.length;
}
@Override
public
Object getItem(
int
position) {
// TODO Auto-generated method stub
return
itemViews[position];
}
@Override
public
long
getItemId(
int
position) {
// TODO Auto-generated method stub
return
position;
}
@Override
public
View getView(
int
position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if
(convertView ==
null
)
return
itemViews[position];
return
convertView;
}}
}
}
|
本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2013/03/14/2960192.html,如需转载请自行联系原作者