ListView 自定義適配器 網上查了有很多,在此記錄一下。
ListView綁定數據顯示,實現效果如下:

一、定義一個布局文件checkvouch_unverify_item.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="60dp" android:orientation="horizontal" > <!-- id --> <TextView android:id="@+id/id" android:textSize="40sp" android:gravity="center" android:layout_width="55dp" android:layout_height="match_parent" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="3" android:orientation="vertical" > <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- cMaker --> <TextView android:id="@+id/cMaker" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- dAddDate --> <TextView android:id="@+id/dAddDate" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <!-- cVerify --> <TextView android:id="@+id/cVerifyStatus" android:layout_weight="1" android:gravity="center" android:layout_width="wrap_content" android:layout_height="match_parent" /> <!-- cVerifyDate --> <!-- Button設置為沒有焦點 --> <Button android:id="@+id/btnVerify" android:focusable="false" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="match_parent" android:text="@string/btn_Verify" /> </LinearLayout>
二、自定義適配器類繼承BaseAdapter
/** * 自定義ListView適配器 * @author zhenyun * */ private class CheckListAdapter extends BaseAdapter { private List<CheckVouch> list=null; private Context context=null; public CheckListAdapter(List<CheckVouch> list,Context context) { super(); this.list= list; this.context = context; } @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return list.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return list.get(position).getId(); } @Override public View getView(final int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder item = null; if(convertView ==null) { convertView = LayoutInflater.from(context).inflate(R.layout.checkvouch_unverify_item, null); item = new ViewHolder(); item.id= (TextView) convertView.findViewById(R.id.id); item.name= (TextView) convertView.findViewById(R.id.name); item.cMaker= (TextView) convertView.findViewById(R.id.cMaker); item.dAddDate= (TextView) convertView.findViewById(R.id.dAddDate); item.cVerifyStatus= (TextView) convertView.findViewById(R.id.cVerifyStatus); item.btnVerify= (Button) convertView.findViewById(R.id.btnVerify); convertView.setTag(item);//綁定ViewHolder對象 } else { item = (ViewHolder) convertView.getTag();//取出ViewHolder對象 } /**設置TextView顯示的內容,即我們存放在動態數組中的數據*/ item.id.setText(String.valueOf(list.get(position).getId())); item.name.setText(list.get(position).getName()); item.cMaker.setText(list.get(position).getcMaker()); item.dAddDate.setText(DateUtils.DateToString(list.get(position).getdAddDate(),"yyyy-MM-dd")); item.cVerifyStatus.setText(list.get(position).getcVerify().equals("")?"未審":"已審"); /** * 設置按鈕點擊事件 */ item.btnVerify.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Log.i("---->","你點擊了按鈕:"+getItemId(position)); } }); return convertView; } } /** * 存儲控件 * @author zhenyun * */ public class ViewHolder { public TextView id; public TextView name; public TextView cMaker; public TextView dAddDate; public TextView cVerifyStatus; public Button btnVerify; }
三、獲取數據集合、綁定顯示列表(MainActivity)
1\activity_main.xml布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="fill_parent" > </ListView> </LinearLayout>
2、MainActivity類代碼
public class MainActivity extends Activity { private ListView listView; private ProgressDialog dialog; //獲取數據集合 private List<CheckVouch> list = new ArrayList<CheckVouch>(); private Handler handler = new Handler() { @Override public void handleMessage(android.os.Message msg) { ListResult<CheckVouch> result = (ListResult<CheckVouch>) msg.obj; if (result.getResult() == 1) { CheckListAdapter adapter = new CheckListAdapter(result.getList(), MainActivity.this); listView.setAdapter(adapter); } else { Toast.makeText(getApplicationContext(), result.getMessage(), Toast.LENGTH_LONG); } dialog.dismiss(); }; }; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub //設置標題 setTitle(R.string.uncheck_titile); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) this.findViewById(R.id.listView); dialog = new ProgressDialog(this); dialog.setTitle("提示"); dialog.setMessage("正在查詢..."); dialog.show(); new Thread(new SearchThread()).start(); } @Override public void setTitle(CharSequence title) { // TODO Auto-generated method stub //super.setTitle(R.string.uncheck_titile); super.setTitle(title); } @Override public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub // return super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.main, menu); return true; } private class SearchThread implements Runnable { @Override public void run() { // TODO Auto-generated method stub ListResult<CheckVouch> result = Common.getInstance() .checkvouch_SelectList(); Message msg = Message.obtain(); msg.obj = result; handler.sendMessage(msg); } } }
我讀取的是網絡數據,必須開啟一個新的線程,所以放在handler中處理顯示的數據。

