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