android回调的理解------异步任务回调接口

注意,我要放大招了!!哈哈哈哈,开玩笑啦~
最近一直被回调接口折磨的欲生欲死的,网上看了很多例子,还是不明白有什么作用,最后逼不得已请教了一个朋友(其实我是想自己想明白的 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值