Android listview與adapter用法(包括自定義需要的介面卡)
阿新 • • 發佈:2019-02-13
publicclass MyListViewBase extends Activity { private ListView lv; /*定義一個動態陣列*/ ArrayList<HashMap<String, Object>>listItem;/** Called when the activity is first created. */
@Override publicvoid onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.main); lv = (ListView) findViewById(R.id.lv); MyAdapter mAdapter = newMyAdapter(this);//得到一個MyAdapter物件lv.setAdapter(mAdapter);//為ListView繫結Adapter /*為ListView新增點選事件*/
lv.setOnItemClickListener(new OnItemClickListener() { @Override publicvoid onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Log.v("MyListViewBase", "你點選了ListView條目" + arg2);//在LogCat中輸出資訊 } }); }/*新增一個得到資料的方法,方便使用*/ private ArrayList<HashMap<String, Object>> getDate(){ ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>(); /*為動態陣列新增資料*/ for(int i=0;i<30;i++) { HashMap<String, Object> map = newHashMap<String, Object>(); map.put("ItemTitle", "第"+i+"行"); map.put("ItemText", "這是第"+i+"行"); listItem.add(map); } return listItem; }/* * 新建一個類繼承BaseAdapter,實現檢視與資料的繫結 */ privateclass MyAdapter extends BaseAdapter { private LayoutInflater mInflater;//得到一個LayoutInfalter物件用來匯入佈局 /*建構函式*/
public MyAdapter(Context context) { this.mInflater = LayoutInflater.from(context); } @Override publicint getCount() { return getDate().size();//返回陣列的長度 } @Override public Object getItem(int position) { returnnull; } @Override publiclong getItemId(int position) { return 0; } /*書中詳細解釋該方法*/ @Override public View getView(finalint position, View convertView, ViewGroup parent) { ViewHolder holder; //觀察convertView隨ListView滾動情況
Log.v("MyListViewBase", "getView " + position + " " + convertView); if (convertView == null) { convertView = mInflater.inflate(R.layout.item, null); holder = new ViewHolder(); /*得到各個控制元件的物件*/
holder.title = (TextView) convertView.findViewById(R.id.ItemTitle); holder.text = (TextView) convertView.findViewById(R.id.ItemText); holder.bt = (Button) convertView.findViewById(R.id.ItemButton); convertView.setTag(holder);//繫結ViewHolder物件 } else{ holder = (ViewHolder)convertView.getTag();//取出ViewHolder物件 } /*設定TextView顯示的內容,即我們存放在動態陣列中的資料*/
holder.title.setText(getDate().get(position).get("ItemTitle").toString()); holder.text.setText(getDate().get(position).get("ItemText").toString()); /*為Button新增點選事件*/ holder.bt.setOnClickListener(new OnClickListener() { @Override publicvoid onClick(View v) { Log.v("MyListViewBase", "你點選了按鈕" + position); //列印Button的點選資訊 } }); return convertView; } }/*存放控制元件*/ publicfinalclass ViewHolder{ public TextView title; public TextView text; public Button bt; } }