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/
欢迎任何形式的转载,未经作者同意,请保留此段声明!
浙公网安备 33010602011771号