Android中Adapter如果继承自BaseAdapter的话必须实现一下四个方法

getCount(); getItem(int position);getItemId(int position);getView(int position, View convertView, ViewGroup parent);

其实每个adapter真正变化的部分就是getView方法。这里用于控制每个Item显示出来的效果。 所以我自定义了一个BaseAdapter,叫做AppBaseAdapter。代码如下:

/**     * Adapter基类     */    public abstract class AppBaseAdapter<T> extends BaseAdapter {        public List<T> list = new ArrayList<T>();        public LayoutInflater inflater;        public Context mContext;        public AppApplication appContext;        public AppBaseAdapter(Context context) {            this.mContext = context;            appContext = AppApplication.getInstance();            inflater = LayoutInflater.from(mContext);        }        @Override        public int getCount() {            return list.size();        }        @Override        public T getItem(int position) {            return list.get(position);        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            return convertView;        }        //向list中添加数据        public void refreshAdapter(List<T> arrayList) {            list.addAll(arrayList);            notifyDataSetChanged();        }        //清空list集合        public void clear() {            list.clear();            notifyDataSetChanged();        }        //移除指定位置的对象        public void remove(int index) {            list.remove(index);            notifyDataSetChanged();        }        //移除对象        public void remove(Object obj) {            list.remove(obj);            notifyDataSetChanged();        }    }
使用一个简单的泛型,暂时不去考虑list的数据类型。AppBaseAdapter一个好处就是可以实现数据的延迟绑定。假设你要先从服务器获取数据,然后通过listview显示,使用AppBaseAdapter之后 可以先setAdatper,等到数据加载完成之后,通过调用refreshAdapter(list集合)即可显示数据
下面给出一个简单的使用例子:
import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.ListView;import android.widget.TextView;import java.util.ArrayList;public class MyActivity extends Activity {    private ListView mListView;    private View mEmptyView;    private MyAdapter adapter;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        mListView = (ListView) this.findViewById(R.id.listview);        mEmptyView = this.findViewById(R.id.empty);        adapter = new MyAdapter(this);        mListView.setAdapter(adapter);        //setEmptyView中传入的view一定要包含在根view中        mListView.setEmptyView(mEmptyView);    }    @Override    protected void onResume() {        super.onResume();        loadData();    }    private void loadData() {        new Thread() {            @Override            public void run() {                super.run();                try {                    Thread.sleep(5 * 1000);                } catch (InterruptedException e) {                    e.printStackTrace();                }                final ArrayList<String> strings = new ArrayList<String>();                for (int i = 0, count = 10; i < count; i++) {                    strings.add("count is :" + i);                }                runOnUiThread(new Runnable() {                    @Override                    public void run() {                        adapter.refreshAdapter(strings);                    }                });            }        }.start();    }    class MyAdapter extends AppBaseAdapter {        public MyAdapter(Context context) {            super(context);        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            ViewHolder holder = null;            if (convertView == null) {                holder = new ViewHolder();                convertView = inflater.inflate(R.layout.list_item, null);                holder.textView = (TextView) convertView.findViewById(R.id.textview);                convertView.setTag(holder);            } else {                holder = (ViewHolder) convertView.getTag();            }            String item = (String) list.get(position);            holder.textView.setText(item);            return convertView;        }        class ViewHolder {            TextView textView;        }    }}
deme下载地址: http://www.oschina.net/code/snippet_924286_44753

更多相关文章

  1. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. Android之——jni通用工具方法
  5. android报The content of the adapter has changed but ListView
  6. Android实现内存中数据保存到sdcard的方法
  7. OpenCV4Android(安卓)不需要安装OpenCVManager,就可以运行的方法
  8. android开发游记:从viewpager禁用滚动 总结android事件分发机制
  9. Android(安卓)代码分析 私有析构函数

随机推荐

  1. Android 报错处理:not attached to window
  2. Android Building Apps with Over 65K Me
  3. android studio升级到3.0.1后apt报错解决
  4. 获得android keystore的SHA1值
  5. android 利用环形菜单制作带数字表盘的时
  6. android pull解析xml最简单的方法
  7. 怎么挂载android system.img
  8. [Android]通知栏与操作栏的高度-State Ba
  9. 【android】禁止Edittext弹出软键盘并且
  10. android全格式多媒体播放器(二:opencore媒