zoukankan      html  css  js  c++  java
  • Android_listView_BaseAdapter

    layout.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >
    
        <ListView 
            android:id="@+id/listView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            ></ListView>
    </RelativeLayout>

    layout_item.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >
        <ImageView 
            android:id="@+id/image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
        <TextView 
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
    </LinearLayout>

    main.java

    package com.example.day08_listview_baseadapter03_convertview;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.ListView;
    import android.widget.TextView;
    /**
     * 1.滚动控件
        1.ScrollView表示可以垂直方向滚动的控件
        2.HorizontalScrollView表示的是水平方向滚动的控件
        3. android:scrollbars="none"设置是否有滚动bar
        4.滚动控件之间可以嵌套
        *5.滚动控件只能有一个子控件
    
    2.listview 列表控件 --适配器控件
      1.能展示具有相同的数据类型,相似的ui显示的多组数据
      2.适配器将数据转换成列表能够显示视图
      3.数据源可以是entrys,数组,集合
    3.适配器填充数据
        1.arrayadapter 
           1.只能填充文本内容
           2.只能填充一个文本
        2.simpleadapter
           1.可以自定义item布局,里面可以包含图片,文本,button,checkbox等..
           2.可以设置多样的数据
           
           3.设置数据不方便
    
    4.自定义适配器去完成复杂样式的布局view --- baseadapter
         1.baseadapter是抽象类,需要继承
         2.实现未实现的方法
         3.设置适配器
     * @author my
     *
     */
    public class MainActivity extends Activity {
    
        private ListView lv;
        private List<Map<String,Object>> list;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            lv = (ListView) findViewById(R.id.listView);
            list = new ArrayList<Map<String,Object>>();
            int[] image = {R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher};
            Map<String,Object>map ;
            for (int i = 0; i < image.length; i++) {
                map = new HashMap<String, Object>();
                map.put("name", "杭州"+i);
                map.put("image", image[i]);
                list.add(map);
            }
            MyAdapter myAdapter = new MyAdapter();
            lv.setAdapter(myAdapter);
        }
    class MyAdapter extends BaseAdapter{
        /**
         * 必须实现,决定适配器空间的item的数量
         * 通常返回数据源的长度,当返回0时,没有显示
         */
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return list.size();
        }
        /** 
         * position表示的是item对应的索引
         *   通常根据索引来获得对应的数据,并返回  
         *   不是必须实现
         *     
         */
        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return list.get(position);
        }
        /**
         * position表示的是item对应的索引
         * 通常返回position作为item的id
         * 不是必须实现
         */
        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }
        
        /**
         * 用来确定一个item展示的视图view
         * 返回的view就表示需要显示的一个item的view
         * position表示的是当前显示的item的view所对应的索引
         * convertView 可以复用的view
         * parent 表示的是设置该适配器的适配器控件(listView)
         */
        //布局的复用
        /**
         * 问题: getview在滑动的过程中,会重复多次执行
            1.会多次将布局文件转换成view(需要读取xml文件和解析),而这个方法是耗时,消耗资源的方法
            2.会多次遍历view去找控件,会消耗时间和资源
              解决:convertView表示的是可以复用view
         */
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            View view = convertView;
            ViewHolder viewHolder ;
            //第一次调用
            if(view==null){
                //加载布局
                view = View.inflate(MainActivity.this, R.layout.layout_item, null);
                viewHolder = new ViewHolder();
                //实例化控件(因为是在当前布局中查找控件,所以必须使用view调用findViewById())
                viewHolder.text = (TextView) view.findViewById(R.id.text);
                viewHolder.image = (ImageView)view.findViewById(R.id.image);
                //设置标记
                view.setTag(viewHolder);
            }else{
                //得到标记获得viewHolder对象
                viewHolder = (ViewHolder) view.getTag();
                
            }
            //获得该索引位置的map集合
            Map<String,Object>map = list.get(position);
            //为适配器控件的每一条view设置数据
            viewHolder.text.setText((String)map.get("name"));
            viewHolder.image.setImageResource((Integer)map.get("image"));
            return view;
        }
        
    }
    //自定义类(一般都使用ViewHolder类来存view控件)
    class ViewHolder{
        private TextView text;
        private ImageView image;
    }
    
    
    }

     

  • 相关阅读:
    Java学习个人备忘录之继承
    Java学习个人备忘录之文档注释
    Java学习个人备忘录之数组工具类
    Java学习个人备忘录之关键字static
    Java学习个人备忘录之构造函数&this
    Java学习个人备忘录之面向对象概念
    Java学习个人备忘录之数组
    Java学习个人备忘录之入门基础
    hdoj1162-Eddy's picture(kruskal)
    hdoj1102-Constructing Roads(Kruskal)
  • 原文地址:https://www.cnblogs.com/fangg/p/5734687.html
Copyright © 2011-2022 走看看