比如说我们已经得到了数据,想在一个listview或者在其他的控件中显示的,并且我们显示想要自己设计样式来显示的话就要用到自定义适配器了,下面让我们结合代码讲一下具体的使用方法:
代码会有注释的哦:
截取的一段得取数据的代码(实例按照读者自己写的代码而定)
1 private void selectSpinner(String title,String linNum){ 2 int i = 1 ; 3 AppMainRoadInfoTab appMainRoadInfoTab = (AppMainRoadInfoTab) getActivity(); 4 SQLiteDatabase db = appMainRoadInfoTab.getDbHelper().getReadableDatabase(); 5 Cursor c = db.rawQuery("select * from tb_Stations inner join tb_carinfo on tb_Stations.LineID = tb_carinfo.LineID where tb_carinfo.Title ='"+title+"' and tb_carinfo.LineNum='"+linNum+"'", null); 6 List<String> items = new ArrayList<String>(); 7 while(c.moveToNext()){ 8 String name= i +"."+c.getString(c.getColumnIndex("StationName")); 9 String booble = c.getString(c.getColumnIndex("IsStop")); 10 if(booble.equals("false")){ 11 name= null; 12 continue; 13 }else{ 14 items.add(name); 15 } 16 i++; 17 } 18 NewBaseAdapter adapter=new NewBaseAdapter(this.getActivity(), items, R.layout.bus_listview_item); 19 listView.setAdapter(adapter); 20 }
第一:比如说我们上述得到了一个String 类型的一个l组ist数据想让这个组数据按照我们心中的样式展现出来,展现出来的话我们就要新建一个xml文件存放你写的控件,还有你自己配置的属性,下面给大家简单的贴一下我写的xml文件代码:listitem.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/myListData" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="left" android:textSize="20sp" android:textColor="#C1FFC1" /> </LinearLayout>
第二:我们就要新建我们的自定义设配器了代码如下:
1 package com.iflytek.adapter; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import com.iflytek.iflytekbus.R; 7 import android.content.Context; 8 import android.view.LayoutInflater; 9 import android.view.View; 10 import android.view.ViewGroup; 11 import android.widget.BaseAdapter; 12 import android.widget.TextView; 13 14 public class NewBaseAdapter extends BaseAdapter{ 15 16 private Context context; 17 private ArrayList<String> list; 18 private int resource; 19 private LayoutInflater inflater; 20 public NewBaseAdapter(Context context,List<String> items ,int resource) { 21 // TODO Auto-generated constructor stub 22 this.context=context; 23 this.inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 24 this.list=(ArrayList<String>) items; 25 this.resource=resource; 26 } 27 private class ViewHolder{ 28 private TextView txtView; 29 } 30 @Override 31 public int getCount() {//返回list的所有数量 32 // TODO Auto-generated method stub 33 return list.size(); 34 } 35 36 @Override 37 public Object getItem(int arg0) {//当前的一个对象 38 // TODO Auto-generated method stub 39 return list.get(arg0); 40 } 41 42 @Override 43 public long getItemId(int arg0) {//当前对象的一个索引 44 // TODO Auto-generated method stub 45 return arg0; 46 } 47 48 @Override 49 public View getView(int position, View convertView, ViewGroup parent) { 50 // TODO Auto-generated method stub 51 ViewHolder holder=new ViewHolder(); 52 if(convertView==null){ 53 String string=list.get(position).toString(); 54 convertView=inflater.inflate(resource, null); 55 holder.txtView=(TextView)convertView.findViewById(R.id.myListData); 56 holder.txtView.setText(string); 57 } 58 else { 59 holder=(ViewHolder)convertView.getTag(); 60 } 61 return convertView; 62 } 63 64 }
以上是自定义设配器,在代码中55行就是引用上面的样式布局文件,在界面上显示的效果也就是自己在这个布局文件显示的效果
注意啦:设配器虽然设置好了,我们要引用啊:看第一帖代码的18和19行,里面的参数之一要对应你设置的参数。
不懂的可以留言...一一解释。