//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="" />