ListView优化总结(二)--Android
3.使用Activity和Delegate与适配器交互
这个内容是从书里看到的,通过托付模式帮助开发人员把全部的业务逻辑从适配器中移到Activity中。
以下是加入电话号码的样例,列表中每一行都有一个removebutton,用于删除电话号码,在适配器中实现“Remove”button的点击处理器,可是。并不在适配器中实现删除对象的方法,我们通过一个托付接口调用Activity的方法删除对象。
适配器的代码:
public class NumbersAdapter extends ArrayAdapter<Integer> {
public static interface NumbersAdapterDelegate { //定义托付接口
void removeItem(Integer value);
}
private LayoutInflater mInflator;
private NumbersAdapterDelegate mDelegate;
public NumbersAdapter(Context context, List<Integer> objects) {
super(context, 0, objects);
mInflator = LayoutInflater.from(context);
}
@Override
public View getView(int position, View cv, ViewGroup parent) {
if (null == cv) {
cv = mInflator.inflate(R.layout.number_row, parent, false);
}
final Integer value = getItem(position);
TextView tv = (TextView) cv.findViewById(R.id.numbers_row_text);
tv.setText(value.toString());
View button = cv.findViewById(R.id.numbers_row_button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (null != mDelegate) {
mDelegate.removeItem(value); //删除对象
}
}
});
return cv;
}
public void setDelegate(NumbersAdapterDelegate delegate) { //为适配器设置托付对象
mDelegate = delegate;
}
}
Activity的代码:
public class MainActivity extends Activity implements
NumbersAdapter.NumbersAdapterDelegate { //实现NumbersAdapterDelegate接口
private static final String TAG = MainActivity.class
.getCanonicalName();
private ListView mListView;
private ArrayList<Integer> mNumbers;
private NumbersAdapter mAdapter;
private EditText mEditText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mEditText = (EditText) findViewById(R.id.main_edittext);
mListView = (ListView) findViewById(R.id.main_listview);
mNumbers = new ArrayList<Integer>();
mAdapter = new NumbersAdapter(this, mNumbers);
mListView.setAdapter(mAdapter);
}
@Override
protected void onResume() {
super.onResume();
mAdapter.setDelegate(this); //在onResume方法中注冊托付对象
}
@Override
protected void onPause() {
super.onPause();
mAdapter.setDelegate(null); //在onPause方法中取消注冊托付对象
}
@Override
public void removeItem(Integer value) { //从列表中移除指定项,然后通知适配器绑定的数据发生变化
mNumbers.remove(value);
Toast
.makeText(this, "Removed object: " + value, Toast.LENGTH_SHORT)
.show();
mAdapter.notifyDataSetChanged();
}
public void addNumber(View v) {
String value = mEditText.getText().toString().trim();
try {
mNumbers.add(Integer.valueOf(value));
mEditText.setText("");
mAdapter.notifyDataSetChanged();
} catch (NumberFormatException e) {
Log.e(TAG, "Couldn't convert to integer the string: " + value);
}
}
}
没有在onCreate方法中设置托付对象,而在onResume方法中设置托付对象。目的是为了确保仅仅在Activity显示在屏幕上的时候才作为托付对象使用。
ListView优化总结(二)--Android的更多相关文章
- Android零基础入门第43节:ListView优化和列表首尾使用
原文:Android零基础入门第43节:ListView优化和列表首尾使用 前面连续几期都在学习ListView的各种使用方法,如果细心的同学可能会发现其运行效率是有待提高的,那么本期就来一起学习有哪 ...
- Android开发之ListView详解 以及简单的listView优化
ListView列表视图 最常用的控件之一,使用场景例如:微信,手机QQ等等. android:divider:每个item之间的分割线,可以使用图片或者色值. android:dividerHeig ...
- Android 常驻与很驻型广播的差别,及ListView优化,Android新手基本知识巩固
1.常驻型广播 常驻型广播,当你的应用程序关闭了,假设有广播信息来,你写的广播接收器相同的能接受到. 他的注冊方式就是在你的应用程序中的AndroidManifast.xml进行注冊. 通常说这样 ...
- Android——ListView优化
1.ListView基本概念 列表显示需要三个元素: ListView:用来展示列表的View. 适配器:用来把数据映射到ListView上 数据:具体的将被映射的字符串,图片或基本组件 适配器类型分 ...
- listview优化 汇总
1,listview加载性能优化ViewHolder 转自: http://blog.csdn.net/jacman/article/details/7087995 在android开发中Listvi ...
- 性能优化之Java(Android)代码优化
最新最准确内容建议直接访问原文:性能优化之Java(Android)代码优化 本文为Android性能优化的第三篇——Java(Android)代码优化.主要介绍Java代码中性能优化方式及网络优化, ...
- 转 cocos2dx内存优化 (之二)
一.cocos2dx之如何优化内存使用(高级篇) 本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=93 一.内存优化原则 为了优化应用内存,你应该知道 ...
- 【转】带checkbox的ListView实现(二)——自定义Checkable控件的实现方法
原文网址:http://blog.csdn.net/harvic880925/article/details/40475367 前言:前一篇文章给大家展示了传统的Listview的写法,但有的时候我们 ...
- 内存泄露--contentView缓存使用与ListView优化
引起Android内存泄露有很多种原因,下面罗列了一些问题,以后会一一解决 1.构造Adapter时没有使用缓存convertView(衍生出ListView优化问题) 2.查询数据库游标没有关闭 3 ...
- Adaptert Listview 优化
这次是关于Listview的优化的,之前一直采用愚蠢的方式来使用listview,出现的情况就是数据多的话下拉的时候会出现卡顿的情况,内存占用多.所以学习了关于listview的优化,并且这也是普遍使 ...
随机推荐
- 【bzoj3566】[SHOI2014]概率充电器 树形概率dp
题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品——概率充电器:“采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI 概率充电器,您生活不可或缺的 ...
- BZOJ 2733 [HNOI2012]永无乡 ——线段树 并查集
用并查集维护联通块. 用线段树的合并来合并联通块. 自己YY了一个写法. #include <map> #include <cmath> #include <queue& ...
- 关于oracle 11g导出的dmp文件无法导入10g的问题
今天遇到一个问题,由于无法远程11g是数据库服务器,只能用exp命令导出了一张表的dmp文件:在本地导入时遇到如下错误: IMP-00010: 不是有效的导出文件, 头部验证失败IMP-00000: ...
- 卡牌游戏(bzoj 3191)
Description N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字 ...
- Activation(hdu 4089)
题目:仙5的激活序列.有以下4种情况: 1.注册失败,但是不影响队列顺序 ,概率为p1 2.连接失败,队首的人排到队尾,概率为p2 3.注册成功,队首离开队列,概率为p3 4.服务器崩溃,激活停止,概 ...
- java并发框架Executor介绍
Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,Completion ...
- HDU 6231 (二分+双指针)
题意:给一个长度为n的数组,问在由这个数组的所有的区间第k小组成B数组中,第m大元素是多少 解法:这题较难的地方在于转化思维.如果去求所有区间的第k小,最坏复杂度是O(n*n)肯定超时. 这题正确的解 ...
- 转 PV操作简单理解
传送门 PV操作简单理解 进程通常分为就绪.运行和阻塞三个工作状态.三种状态在某些条件下可以转换,三者之间的转换关系如下: 进程三个状态之间的转换就是靠PV操作来控制的.PV操作主要就是P操作.V操作 ...
- 标准C程序设计七---35
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- C语言中的数组的访问方式
闲下来,写的代码,很是简单,不解释,代码如下: #include <stdio.h> int main(int argc, char **argv) { char cArray[] = & ...