Android——程序员的情怀——优化BaseAdapter

 

 

总结:

1- 在MainActivity中只放数据,加载适配器

2- 单独定义实体类

3- 自定义适配器,并与实体类相关联,在适配器里写优化的代码将视图与数据相关联

 

MainActivity

2- News.java

3- BaseAdapterDAO.java

package com.example.cycle_toolbar_drawer.BaseAdapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.cycle_toolbar_drawer.R;

import java.util.ArrayList;
import java.util.List;
import java.util.zip.Inflater;

/**
 * Created by Administrator on 2016/5/26 0026.
 *添加数据的baseAdapter实现类
 */
public class BaseAdapterDAO extends BaseAdapter {
    //通过构造方法获取数据源中的数据,与适配器关联起来
    private List<News> mNews;
    private LayoutInflater mLayoutInflater;

    public BaseAdapterDAO(Context context,List<News> news){
        mNews = news;
        //context要使用当前的Adapter的界面对象mLayoutInflater布局装载器对象
        mLayoutInflater = LayoutInflater.from(context);
    }
    @Override
    public int getCount() {
        return mNews.size();
    }
    @Override
    public Object getItem(int i) {
        return mNews.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        //2- 定义ViewHolder
        ViewHolder viewHolder;
        if (view == null) {
            //3- 实例化ViewHolder 并且适配ViewHolder中的三个参数
            viewHolder = new ViewHolder();
            view = mLayoutInflater.inflate(R.layout.content_listview_linear, null);
            viewHolder.ViewHolder_imageView = (ImageView) view.findViewById(R.id.content_listView_imageView);
            viewHolder.ViewHolder_title = (TextView) view.findViewById(R.id.content_listView_Title);
            viewHolder.ViewHolder_content = (TextView) view.findViewById(R.id.content_listView_Content);

            //4- 通过setTag将ViewHolder与view相关联
            view.setTag(viewHolder);
        }else {
            //5- 当不为空的时候直接通过getTag方法找到控件
            viewHolder = (ViewHolder) view.getTag();
        }
        News newsItem = mNews.get(i);
        viewHolder.ViewHolder_imageView.setImageResource(newsItem.getItem_image_Resource_id());
        viewHolder.ViewHolder_title.setText(newsItem.getItem_Title());
        viewHolder.ViewHolder_content.setText(newsItem.getItem_Content());

        return view;

            /* 普通方式
            ImageView content_listView_imageView = (ImageView) view.findViewById(R.id.content_listView_imageView);
            TextView content_listView_Title = (TextView) view.findViewById(R.id.content_listView_Title);
            TextView content_listView_Content = (TextView) view.findViewById(R.id.content_listView_Content);

            News newsItem = mNews.get(i);
            content_listView_imageView.setImageResource(newsItem.getItem_image_Resource_id());
            content_listView_Title.setText(newsItem.getItem_Title());
            content_listView_Content.setText(newsItem.getItem_Content());
            return view;*/
    }
    // 文艺式 ——避免通过findViewById找内容而浪费资源和时间

    //1- 创建内部类ViewHolder
    class ViewHolder{
        public ImageView ViewHolder_imageView;
        public TextView ViewHolder_title;
        public TextView ViewHolder_content;
    }
}

 

posted on 2016-05-27 16:21  Chen_s  阅读(186)  评论(0编辑  收藏  举报

导航