//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="" />
转载于:https://my.oschina.net/u/2541146/blog/603764