美文网首页
Android:控件ListView

Android:控件ListView

作者: leo1091 | 来源:发表于2017-04-28 16:29 被阅读0次

    ListView数据的展示主要依靠是Adapter数据适配器

    • ArrayAdapter:支持泛型操作,最简单的一个Adapter,只能展现一行文字
    public ArrayAdapter(Context context, @LayoutRes int resource, @IdRes int textViewResourceId,@NonNull T[] objects)
    //例如
    ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, new String[]{"item1","item2"});
    
    • SimpleAdapter:同样具有良好扩展性的一个Adapter,可以自定义多种效果
    public SimpleAdapter(Context context, List<? extends Map<String, ?>> data,
                @LayoutRes int resource, String[] from, @IdRes int[] to) ;
    //例如
    SimpleAdapter adapter = new SimpleAdapter(this, getData(),R.layout.list_2,
                    new String[]{"img","text1", "text2"}, new  int[]{R.id.imv, R.id.text1, R.id.text2});
    
    R.layout.list_2 //自定义布局包含img以及两个textview
    

    如下布局


    AEBDF573-0D95-40EE-9235-332737650B3A.png
    • BaseAdapter:抽象类,实际开发中我们会继承这个类并且重写相关方法,用得最多的一个Adapter

    1、继承BaseAdapter之后,需要重写以下四个方法:getCount,getItem,getItemId,getView。
    2、其中getView方法最为重要,在这里会根据实现定义好的布局确定显示的效果,并返回一个view对象在item中展示出来。
    3、关于listview的优化也在getView里展现。如下代码,其实ViewHolder和contentView可以不用,直接导入布局显示内容就可以了就像下面这样,意味着有多少行就绘制多少行,如若是几千行,性能消耗就不止是一点了

        public View getView(int position, View convertView, ViewGroup parent) {
            //加载布局为一个视图
            View view=inflater.inflate(R.layout.layout_student_item,null);
            Student student=getItem(position);
            //在view视图中查找id为image_photo的控件
            ImageView imageViewIcon= (ImageView) (ImageView)convertView.findViewById(R.id.imv);
            ....
            imageViewIcon.setImageResource...
            ...
            return view;
        }
    
    //优化后的代码
    //一个是防止重绘view,二是借助tag来寻找view,这样就避免了findViewById对控件的层层查询。值得考究
    @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
            ViewHolder holder = null;
            if (null == convertView) {
                convertView = mInflater.inflate(R.layout.list_2, null);
                holder.imageViewIcon = (ImageView)convertView.findViewById(R.id.imv);
                holder.textViewTitle = (TextView)convertView.findViewById(R.id.text1);
                holder.textViewDesc = (TextView)convertView.findViewById(R.id.text2);
    
                convertView.setTag(holder);
            }else {
                holder = (ViewHolder) convertView.getTag();
            }
    
            DataModule dataModule = mListModule.get(position);
            if (dataModule.iconResId > 0) {
                holder.imageViewIcon.setImageResource(dataModule.iconResId);
            } else {
                holder.imageViewIcon.setImageResource(R.drawable.icon_user);
            }
            ....
      }
    

    相关文章

      网友评论

          本文标题:Android:控件ListView

          本文链接:https://www.haomeiwen.com/subject/jehlzttx.html