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