android回调的理解------异步任务回调接口
来源:互联网 发布:现在做淘宝还有前景吗 编辑:程序博客网 时间:2024/05/16 12:01
注意,我要放大招了!!哈哈哈哈,开玩笑啦~
最近一直被回调接口折磨的欲生欲死的,网上看了很多例子,还是不明白有什么作用,最后逼不得已请教了一个朋友(其实我是想自己想明白的 0 0),在博客上整理一下思路,以供日后脑子不好使的时候回忆。
首先了解一下接口的含义:
接口回调在android中一般是使用在数据的交互上(我是一般这样的,不对的请大神指教),比如你在Activity-A(下面简称A)中定义了一个接口,如下
public interface Callback { void send(); }
然后在A中定义了一个获取获取接口的类
private Callback callback; public void setCallBack(Callback callBack){ this.callback=callBack; }
然后在Activity–B中进行注册监听,即implements Callback这个接口,覆写send()的方法,进行你自己的相关操作,操作完成后,callback回调回Activity-A这个页面再进行相关操作,最终回调完成,可能我讲的不清楚,看代码吧,简单粗暴。
下面是代码是实现主Activity中进行异步动态更新listview的过程,注意:onPostExcute()本身在UI进行操作的,但是我使用接口回调的方法进行更新:
public class QiushibaikeAsyncTask extends AsyncTask<String, Void, List<Map<String,Object>>> { //定义接口变量 private CallBack callback; //构造函数中传入接口 public QiushibaikeAsyncTask(CallBack callback) { this.callback=callback; } @Override protected List<Map<String,Object>> doInBackground(String... params) { // TODO Auto-generated method stub String str = HttpUtil.getString(params[0]); List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(); list = ParseJsonString.fromStringToList(str); return list; } @Override protected void onPostExecute(List<Map<String,Object>> result) { // TODO Auto-generated method stub super.onPostExecute(result); //发送结果 callback.send(result); } //定义接口 public interface CallBack { public void send(List<Map<String,Object>> result); }}
主Activity
public class MainActivity extends Activity { private ListView lv; // 集合数据 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); // 自定义适配器 MyAdapter adapter; private RelativeLayout layout; // 页码变量 int curPage = 1; int sumPage = Integer.MAX_VALUE;// 假设 // 判断是否到达底部 boolean isBottom = false; String path = "http://m2.qiushibaike.com/article/list/suggest?page="; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.lv); layout = (RelativeLayout) findViewById(R.id.layout); // 创建适配器对象 adapter = new MyAdapter(MainActivity.this, list, lv); // 开启异步任务 QiushibaikeAsyncTask qiushi = new QiushibaikeAsyncTask(new CallBack() { @Override public void send(List<Map<String, Object>> result) { // TODO Auto-generated method stub //进行页面刷新操作 list.addAll(result); adapter.notifyDataSetChanged(); lv.setAdapter(adapter); } }); qiushi.execute(path + curPage); // ListView 的滚动事件 lv.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case SCROLL_STATE_FLING: break; case SCROLL_STATE_IDLE: if (isBottom) { if(curPage<sumPage) { layout.setVisibility(View.VISIBLE); // 重新加载下页数据 curPage++; // 开启异步任务下载内容 new QiushibaikeAsyncTask(new CallBack() { @Override public void send(List<Map<String, Object>> result) { if (result.size() == 0) { sumPage = curPage; return; } // 将result值添加到list list.addAll(result); adapter.notifyDataSetChanged(); } }).execute(path + curPage); // 将isBottom设置成false isBottom = false; } } break; case SCROLL_STATE_TOUCH_SCROLL: break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // 判断是否到达底部 if (firstVisibleItem + visibleItemCount == totalItemCount) { isBottom = true; } else { isBottom = false; } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; }}
0 0
- android回调的理解------异步任务回调接口
- android异步任务及接口回调传输数据
- Android中的AsyncTask(异步任务)和接口回调使用详解
- android中接口回调的理解
- Android对回调接口的理解
- 关于android接口回调的理解
- 对异步回调的理解
- Callback异步回调接口
- Android接口回调,最简单的理解方式
- android学习之路之接口回调的理解
- 对于Android中接口回调机制的理解
- Android回调接口简单理解
- Android接口回调深入理解
- Android中异步任务机制AsyncTask的理解
- 【java|Android接口回调】小小猿理解的接口回调
- Java回调接口的理解
- 对于接口回调的简单理解
- java中接口回调的理解
- Unity3D 几个默认函数的区分
- PHP菜鸟手记——如何解决无法装载动态链接库的问题
- 【bzoj1002】【FJOI2007】【轮状病毒】【找规律】
- [Shader]对NGUI的UISprite和UITexture进行裁剪(scrollview + 遮罩)
- JS获取Select标签选中的值
- android回调的理解------异步任务回调接口
- 为什么说C++不是完全面向对象的语言
- samba服务器快速搭建
- 20150813-java学习笔记
- zoj 3859——Candies
- Git 使用方法
- Android自定义矩形及selector、shape的使用
- Nature:深度学习的现在和未来:DeepLearning、无监督学习、NLP
- javascript中 if(变量)和if(变量=true)的区别