使用接口传递数据

2016-12-14  本文已影响0人  向着远方奔跑
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

上一篇 下一篇

猜你喜欢

热点阅读