zoukankan      html  css  js  c++  java
  • 我的Android开发之路——ListView的使用

      在Android开发过程中,遇到需要列表显示的时候,这时候就会用到listview。

      

      1.首先创建一个ListViewTest项目,选择empty activity类型。修改activity_main.xml的布局文件,添加listview控件,设置宽高和id等属性

    <?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">
        
        <ListView
            android:id="@+id/lv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            
        </ListView>
    
    </LinearLayout>

       此时通过预览就可以看见listview的布局情况,接下来我们要添加每一个item的布局,添加lv_item.xml布局

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:orientation="horizontal"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent">
    
        <ImageView
            android:id="@+id/iv_icon"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:gravity="center"
            />
        <TextView
            android:id="@+id/lv_name"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:text="icon"
            android:gravity="center"
            android:textSize="40sp"
            android:textColor="#1296db"/>
    </LinearLayout>

      这里使用每行一个图标  一个名称作为item的内容(对应imageview 和textview)

       2.适配器的编写

      这里编写的适配器IconAdapter继承自BaseAdapterArrayAdapterSimpleAdapter使用度不高

      继承BaseAdapter抽象类后,要实现父类中的getCount()、getItem()、getItemId()、getView()四个方法。

      系统在绘制ListView之前,将会先调用getCount方法来获取Item的个数。每绘制一个Item就会调用一次getView方法,在getView中引用事先定义好的layout布局确定显示的效果并返回一个View对象作为一个Item显示出来。

      这两个方法是自定ListView显示效果中最为重要的,同时只要重写好了这两个方法,ListView就能完全按开发者的要求显示。而getItem和getItemId方法将会在调用ListView的响应方法的时候被调用到。

      

      创建IconAdapter.java

      ①首先需要一个映射的list,这个list中包含了实体bean,具体就对应了每一个item的内容。用bean封装了每一个item的所需要的属性。

      添加IconBean.java

    public class IconBean {
        public String IconName;
        public int Icon_Image_Id;
    
        public String getIconName() {
            return IconName;
        }
    
        public void setIconName(String iconName) {
            IconName = iconName;
        }
    
        public int getIcon_Image_Id() {
            return Icon_Image_Id;
        }
    
        public void setIcon_Image_Id(int icon_Image_Id) {
            Icon_Image_Id = icon_Image_Id;
        }
        
        public IconBean(String s,int image_id){
            IconName=s;
            Icon_Image_Id=image_id;
        }
    }

      在adapter中添加装有IconBean的list,此时adapter的代码如下:

    class IconAdapter extends BaseAdapter {
    
        public List<IconBean> mList;
      public Context mContext;
      public LayoutInflater mLayoutInflater;
        @Override
        public int getCount() {
            return 0;
        }
    
        @Override
        public Object getItem(int position) {
            return null;
        }
    
        @Override
        public long getItemId(int position) {
            return 0;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            return null;
        }
    }

      ②在Adapter中添加构造方法,参数传入Context及刚才的List对象

      在之后解析布局的时候,还需要使用到layoutinflater,所以在构造方法中对它进行初始化。

     public IconAdapter(Context context,List<IconBean> list){
            mContext=context;
            mList=list;
            mLayoutInflater=LayoutInflater.from(context);
        }

      ③修改getcount()、getItem、getItemId()三个方法

        @Override
        public int getCount() {
            return mList.size();
        }
    
        @Override
        public Object getItem(int position) {
            return mList.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }

      ④修改getView()方法,也是最主要的方法,这里使用ViewHolder写法。

      创建ViewHolder静态类,并完成getView()方法。

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder viewHolder;
            if (convertView==null){
                viewHolder=new ViewHolder();
                convertView=mLayoutInflater.inflate(R.layout.lv_item,null);
                viewHolder.mImageView=(ImageView) convertView.findViewById(R.id.iv_icon);
                viewHolder.mTextView=(TextView) convertView.findViewById(R.id.lv_name);
                convertView.setTag(viewHolder);
            }else {
                viewHolder= (ViewHolder) convertView.getTag();
            }
            //从list取出对象
            IconBean bean=mList.get(position);
            //设置item的内容
            viewHolder.mImageView.setImageResource(bean.getIcon_Image_Id());
            viewHolder.mTextView.setText(bean.getIconName());
            return convertView;
        }
    
        private static class ViewHolder{
            public ImageView mImageView;
            public TextView mTextView;
        }

      此时完成适配器的编写。

      3.在主线程中完成listview的使用

      ①添加listview和对应含有IconBean的映射list并完成初始化。

      

        private List<IconBean> mIconBeenList;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mIconBeenList=new ArrayList<>();
            ListView iconList= (ListView) findViewById(R.id.lv);
        }

      ②添加测试用的数据

        private void initData() {
            IconBean Add=new IconBean("Add",R.drawable.add);
            mIconBeenList.add(Add);
            IconBean Close=new IconBean("Close",R.drawable.close);
            mIconBeenList.add(Close);
            IconBean Enter=new IconBean("Enter",R.drawable.enter);
            mIconBeenList.add(Enter);
            IconBean FullScreen=new IconBean("FullScreen",R.drawable.fullscreen);
            mIconBeenList.add(FullScreen);
            IconBean Right=new IconBean("Right",R.drawable.right);
            mIconBeenList.add(Right);
            mIconBeenList.add(Right);
            mIconBeenList.add(FullScreen);
            mIconBeenList.add(Enter);
            mIconBeenList.add(Close);
            mIconBeenList.add(Add);
        }

      ③为listview添加adapter

            iconList.setAdapter(new IconAdapter(this,mIconBeenList));

      此时完成例子的编写,MainActivity.java代码为

    public class MainActivity extends AppCompatActivity {
    
        private List<IconBean> mIconBeenList;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mIconBeenList=new ArrayList<>();
            ListView iconList= (ListView) findViewById(R.id.lv);
            initData();
            iconList.setAdapter(new IconAdapter(this,mIconBeenList));
        }
    
        private void initData() {
            IconBean Add=new IconBean("Add",R.drawable.add);
            mIconBeenList.add(Add);
            IconBean Close=new IconBean("Close",R.drawable.close);
            mIconBeenList.add(Close);
            IconBean Enter=new IconBean("Enter",R.drawable.enter);
            mIconBeenList.add(Enter);
            IconBean FullScreen=new IconBean("FullScreen",R.drawable.fullscreen);
            mIconBeenList.add(FullScreen);
            IconBean Right=new IconBean("Right",R.drawable.right);
            mIconBeenList.add(Right);
            mIconBeenList.add(Right);
            mIconBeenList.add(FullScreen);
            mIconBeenList.add(Enter);
            mIconBeenList.add(Close);
            mIconBeenList.add(Add);
        }
    }

      

      大功告成,在模拟器上运行一下

      

      项目地址:https://github.com/Lock0nStratos/ListViewTest

  • 相关阅读:
    mysql5.7.10 源码编译安装记录 (centos6.4)【转】
    bash脚本里su命令执行
    linux服务器登录时慢出现卡顿
    iptables NAT规则【转】
    双机/RAC/Dataguard的区别【转】
    一步一步搭建 oracle 11gR2 rac + dg 之前传 (一)【转】
    一步一步搭建oracle 11gR2 rac+dg之环境准备(二)【转】
    一步一步搭建oracle 11gR2 rac+dg之共享磁盘设置(三)【转】
    一步一步搭建 oracle 11gR2 rac+dg之grid安装(四)【转】
    一步一步搭建oracle 11gR2 rac+dg之database安装(五)【转】
  • 原文地址:https://www.cnblogs.com/jintao-zhong/p/8568764.html
Copyright © 2011-2022 走看看