ListView

ListView使用需要:data、控件、adapter

1 Protected void onCreate(Bundle savedInstanceState){
2     super.onCreate(savedInstanceState){
3     setContentView(R.layout.activity_main){
4     ArrayAdapter<String> adapter = new ArrayAdapter<String>(
5         MainActivity.this,android.R.layout.simple_list_item_1,data);
6     ListView listView = (ListView)findViewById(R.id.list_view);
7     listView.setadapter(adapter);
8     }
9 }

 

自定义adapter:

  继承adapter并重写getView()

 1 public class FruitAdapter extends Adapter{
 2     private int resourceId;
 3     public FruitAdapter(Context context,in textViewResourceId,List<Fruit> objects){  //textViewResourceId 子项布局id
 5     super(context,textViewResourceId,objects);
 6     resourceId = textViewResourceId;
 7     }
 8     @Override
 9     public View getView(int position,View convertView,  //重写getView()
10         ViewGroup parent){
11     Fruit fruit = getItem(position);  //获得fruit实例
12     View view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
14     imageView fruitImage = (ImageVIew)view.findViewById(R.id.
15         fruit_image);
16     fruitName.setText(fruit.getName());
17     return view;
18     }
19 }

 

重用convertView,提升ListView效率

  在getView方法中添加代码:(如果convertView为空则动态加载布局,否则重用convertView)

......
    View view;
    if(convertVeiw == null){
        view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
    }else{
        view = convertView;
    }
......

 

利用ViewHolder内部类对控件实例进行缓存,避免重复调用findViewById()

......
    public View getView(int postition,Veiw convertView,ViewGroup parent){
        Fruit fruit = getItem(position);
        View view;
        ViewHolder viewHolder;
        if(convertView == null){
            view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
            viewHolder = new ViewHolder();
            viewHolder.fruitImage = (ImageView)view.findViewById(R.id.fruit_image);
            viewHolder.fruitName = (TextView)view.findViewById(R.id.fruit_name);
            view.setTag(viewHolder);  //将ViewHolder存储在View中
        }else{
            view =convertView;
            viewHolder = (ViewHolder)view.getTag();  //重新获取ViewHolder
        }
        viewHolder.fruitImage.setImageResource(fruit.getImageId());
        viewHolder.fruitName.setText(fruit.getName());
        return view;
}

class ViewHolder{
    ImageVIew fruitImage;
    TextView fruitName;
}

 

posted @ 2017-02-13 23:25  yl007  阅读(145)  评论(0编辑  收藏  举报