//BaseAdapter和ListView簡單運用 public class MainActivity extends Activity { private ListView listview; private List<String> list; private MyBaseAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.listview = (ListView) this.findViewById(R.id.listview); // 簡單得給點數據 list = new ArrayList<String>(); for (int i = 0; i < 100; i++) { list.add("item" + i); } adapter = new MyBaseAdapter(list); listview.setAdapter(adapter);// 綁定適配器 } class MyBaseAdapter extends BaseAdapter { private List<String> list; public MyBaseAdapter(List<String> list) { this.list = list; } @Override public int getCount() { // 返回總的數量 return this.list.size(); } @Override public Object getItem(int position) { // 得到點擊選中的位置 return this.list.get(position); } @Override public long getItemId(int position) { // 當前行的id return position; } @Override // 每加載一項(item)都要調用該方法,返回當前的視圖;在屏幕的 // 第一屏時convertView爲null,一屏事後不爲null public View getView(int position, View convertView, ViewGroup parent) { ViewHolder vHolder; if (convertView == null) {// 在第一屏調用時 vHolder = new ViewHolder(); // 把item_listview.xml佈局文件轉換爲java對象(佈局(視圖)對象) // 使用佈局填充器生成getLayoutInflater() // 三種方式文件佈局關聯,這是最簡單的一種 convertView = getLayoutInflater().inflate( R.layout.item_listview, null); // 第二種: // LayoutInflater.from(MainActivity.this).inflate(R.layout.item_listview, // null); // 第三種:經過系統服務拿到生成器,再進行佈局,前面兩種底層都是調用第三種 LayoutInflater inflater = (LayoutInflater) getSystemService(Service.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.item_listview, null);// root父容器的佈局,設置爲null,會自動給我佈局 TextView text_info = (TextView) convertView .findViewById(R.id.text_info); // 將找到控件的(id)名賦值給封裝類(javaBean)保存 vHolder.text_info = text_info; // 設置一個標記,方便第二屏調用(重用這個) convertView.setTag(vHolder); Log.i("MainActivity", this.list.get(position)); } else { // 第二屏調用時,重用第一屏的item(控件id名) vHolder = (ViewHolder) convertView.getTag(); } // 把當前行的的內容設置給text_info顯示 vHolder.text_info.setText(this.list.get(position)); return convertView; /* * //以上代碼是下面的優化,優化後不會每一次都建立item,而是重用item,可是要建一個ViewHolder類 * //把item_listview.xml佈局文件轉換爲java對象(佈局(視圖)對象) * //使用佈局填充器生成getLayoutInflater() * convertView=getLayoutInflater().inflate(R.layout.item_listview, * null); TextView text_info=(TextView) * convertView.findViewById(R.id.text_info); Log.i("MainActivity", * this.list.get(position)); //把當前行的內容設置給text_info * text_info.setText(this.list.get(position)); return * convertView;//返回當前行的視圖,而後把視圖放到listview(父容器) */ } } class ViewHolder { private TextView text_info;// 佈局中元素的封裝類 } } //主佈局文件 <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" /> //適配器綁定的自定義佈局文件 <TextView android:id="@+id/text_info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" />