1. 程式人生 > >Android listview與adapter用法(包括自定義需要的介面卡)

Android listview與adapter用法(包括自定義需要的介面卡)

複製程式碼
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 = new
MyAdapter(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 = new
HashMap<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;
    }
}
複製程式碼