当需要把片段(fragment)关联到活动(Activity)时,可能要调用onAttach()方法,来告诉片段接收活动传来的更新信息。比方说,页面A是多个健身项目的列表,希望点击某个项目,右侧跳出详细的锻炼动作页面B;点击下一个项目,页面B相应的更新为新选项目的锻炼动作。
当代码中出现 public void onAttach(Activity activity) {} 方法, 并选择API23以上版本时,Android Studio会自动提示该方法被废弃了(deprecated)。
原来时用onAttach(Context context)替换了旧方法。
以Head First Android开发一书中Workout项目为例(297页)
import android.app.Activity;
...
public class WorkoutListFragment extends ListFragment {
....
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.listener = (WorkoutListListener) activity;
}
在API版本23以上,需导入android.content.Context类,并修改代码如下
import android.content.Context;
...
public class WorkoutListFragment extends ListFragment {
....@Override
public void onAttach(Context context){
super.onAttach(context);
this.listener = (WorkoutListListener) context;
}
也有特例。比如stackoverflow中有人提到,小米部分机型不支持 onAttach(Context context)方法,因此,代码中又必须把旧方法添加进来,写成:
import android.app.Activity;
import android.content.Context;
...
public class WorkoutListFragment extends ListFragment {
....@SuppressWarnings("deprecation")
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.listener = (WorkoutListListener) activity;
}@Override
public void onAttach(Context context){
super.onAttach(context);
this.listener = (WorkoutListListener) context;
}