- 例如我的“极简天气”项目中的城市列表的适配器中需要将点击的城市名称传给天气信息界面的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