使用接口传递数据

  • 例如我的“极简天气”项目中的城市列表的适配器中需要将点击的城市名称传给天气信息界面的Activity中,城市列表是在一个Fragment中加载的,所以可以在城市列表的适配器(CityListAdapter)中写一个公用的接口,如下:
private CallBack mCallback;
public CityListAdapter (CallBack callback) {
        this.mCallback = callback;
    }
    
    public interface CallBack {
        public void getCityName(String cityname);
    }

然后在此类中将点击的城市信息获取到并调用接口CallBack中的方法getCityName传入cityname中,如下:

viewHolder.llMain.setOnClickListener(new OnClickListener() {
                   
                   @Override
                   public void onClick(View v) {
                       //点击全部城市响应
                       if(mCallback!=null){
                           
                           mCallback.getCityName(mAllCityList.get(position).getName());
                           
                       }else{
                           Log.e("mcallback-->", "null");
                       }
                   }
               });

此时,要先在应用此适配器的listFragment中实例化CityListAdapter,并接收接口的数据,即城市信息:

private CallBack mCallback;
public listFragment(CallBack callback) {
        this.mCallback = callback;
    }
cityListAdapter = new CityListAdapter(getActivity(), allCityList,
                hotCityList, new CallBack() {

                    @Override
                    public void getCityName(String cityname) {
                        // TODO Auto-generated method stub
                        if (cityname != null) {
                            
                            mCallback.getCityName(cityname);
                            
                            onBackkey();
                        } else {
                            Log.e("null", "kong");
                        }
                    }
                });

然后在activity中实例化listFragment,并接收城市信息:

transaction.replace(R.id.weather_layout, new listFragment(
                        new CallBack() {

                            @Override
                            public void getCityName(String cityname) {
                                
                                tempCity = cityname;

                                showWeather();
                            }

                        }));

若listFragment中另外一个适配器SearchResultAdapter也要传递数据给activity,则在SearchResultAdapter中:

public SearchResultAdapter (CallBack callback) {
        this.mCallback = callback;
    }
viewHolder.tvCityName.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                
                mCallback.getCityName(mSearchList.get(position).getName());
                
            }
        });

然后以相同方式在listFragment中接收:

private CallBack mCallback;
public listFragment(CallBack callback) {
        this.mCallback = callback;
    }

注:先创建一个接口的对象mCallback,然后再创建listFragment的构造方法,之后在下面才可以使用mCallback来调用接口的方法,即mCallback.getCityName(cityname);

searchResultAdapter = new SearchResultAdapter(getActivity(),
                searchCityList, new CallBack() {

                    @Override
                    public void getCityName(String cityname) {
                        // TODO Auto-generated method stub

                        mCallback.getCityName(cityname);

                        onBackkey();
                    }
                });

注:接口是一个公用的传递数据的工具,若要传递的数据类型相同,则只需在一个类中写一次,即可在此包中所用的类使用,但不能跳类传递,若A类中包含B类,B类中包含C类,要将C中的数据传给A类,只能先给B再给A

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,780评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,010评论 19 139
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,571评论 0 17
  • 一. Java基础部分.................................................
    wy_sure阅读 3,839评论 0 11
  • 在我的生活中,除了工作,家务,我的业余爱好只是追剧和逛购物平台,对于外人来说,我是一个没有兴趣爱好的人,低调而冷漠...
    唯唯的妈妈阅读 230评论 0 0