android-ListView

ListView列表是一个我们很常用而且不太好理解的组件
首先我们先来个简单的接触,写一个最普通的ListView
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#00ff00"
android:divider_height="1dp"/>
其中divider可以指定分隔线的颜色,divider_height指定分隔线的高度
在java代码中需要为其设置adapter适配器,以系统定义好的ArrayAdapter为例
private String[] datas = {"DNF","CF","LOL"};//数据源,列表中要显示的数据
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,datas);
第二个参数是android自带的一个布局,里面只有一个textview,第三个就是我们定义的数据源
用findViewById找到listview
list.setAdapter(adapter);//添加适配器
这样一个简单的listview就可以显示出来了,listview只能显示就太局限了,有时我们希望点击某项可以做一些操作,
那我们就尝试给它加个监听吧
list.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent,View view,int position,long id){

}
});
这个列表太简单了,有时我们列表项中的布局需求可能很复杂,那系统布局也无法满足怎么办,放心,我们是
可以自己定义布局的,通常我们都会自己写一个adapter来继承BaseAdapter,这就要重写4个方法
private List<User> data;//存放数据源,加入存放的User对象
//为集合添加数据
public void addAll(List<String> data){
this.data.addAll(data);
notifyDataSetChanged();
}
//清除集合数据
public void clear(){
this.data.clear();
notifyDataSetChanged();
}
@Override
public int getCount() {
// 控制列表有多少个项
return data.size();
}


@Override
public Object getItem(int position) {
// 在position处列表项的内容
return data.get(position);
}


@Override
public long getItemId(int position) {
// 在position处列表项的id,一般id和position数值是相同的
return position;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
// position处列表项的样式,这个方法也是最需要优化的地方,我们用convertView对布局进行缓存重用,
//避免了每次都要重新加载布局,还有ViewHolder对实例进行缓存
User user = getItem(position);
ViewHolder holder;
if(convertView == null){
holder = new ViewHolder();
//自定义一个item_list列表项布局
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_list,null);
holder.iv_icon = (ImageView)convertView.findViewById(R.id.iv_icon);
holder.tv_name = (TextView)convertView.findViewById(R.id.tv_name);
holder.tv_tel = (TextView)convertView.findViewById(R.id.tv_tel);
convertView.setTag(holder);//在convertView中保存holder
} else{
holder = (ViewHolder)convertView.getTag();//获取holder
}
holder.iv_icon.setImageResource(user.getImage());
holder.tv_name.setText(user.getName());
holder.tv_tel.setText(user.getTel());
return convertView;
}
class ViewHolder(){
//定义缓存的实例
ImageView iv_icon;
TextView tv_name;
TextView tv_tel;
}
我们也可以让activity继承ListActivity显示一个简单的列表,也不用setContentView指定布局,例:
public class MainActivity extends ListActivity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
private String[] datas = {"DNF","CF","LOL"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,datas);
setListAdapter(adapter);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值