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
    评论
Android开发中,接口回调是一种常用的设计模式。它用于实现不同组件之间的通信和交互。接口回调的基本原理是,一个(称为回调接口)定义了一些方法,其他可以实现这些方法并注册到回调接口中。当某个事件触发时,回调接口会调用注册的的对应方法来处理事件。 在Android开发中,接口回调广泛应用于各种场景,比如点击事件的处理、网络请求的回调异步任务的通知等。通过接口回调,我们可以将代码的逻辑分离,使得各个组件之间的耦合度降低,提高了代码的可维护性和扩展性。 举个例子来说,假设我们有一个按钮,当用户点击按钮时,我们希望执行一些特定的操作。这时,我们可以定义一个回调接口,比如OnClickListener,其中包含一个方法onClick。然后,我们可以在Activity中实现OnClickListener接口,并将其注册到按钮上。当用户点击按钮时,按钮会调用注册的OnClickListener的onClick方法,从而执行我们指定的操作。 因此,接口回调Android开发中非常重要的一部分,熟练掌握接口回调的使用可以提高代码的质量和开发效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [安卓开发之简单的接口回调](https://blog.csdn.net/weixin_43885787/article/details/86604452)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [详解Android接口回调、方法回调](https://blog.csdn.net/qq_31881469/article/details/80089675)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值