最近在写项目的时候,遇到个需求,Fragment A显示图片列表,单击某张图片以后,跳转到Fragment B,显示被点击图片的大图。在Fragment B界面有一个删除图片的选项。删除图片以后,回到A界面,A界面刷新。
一开始我想的是在Fragment A的代码里重写onResume(),在这个函数中写列表刷新的业务。但是我试了一下,发现从FragmentStack把Fragment B出栈以后并不会执行Fragment A的onResume()方法。
当然也可以把recycleView设置成为静态的,但是我没有选择这个方法。
最后我还是用回调解决了这个问题。
大致代码:
//fragment B
//把Fragment B设置成单例创建.
private static FragemntB fragB = new FragmentB();
private onRefreshListener listener;
public static FragmentB newInstance(){
return fragB;
}
//写接口
public interfabe onRefreshListener(){
void refresh();
}
public void setOnRefreshListener(onRefreshListener listener){
this.listener = listener;
}
//在dialog点击确定以后
public void showDeleteDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder();
builder.setMessage("确定要删除吗?");
builder.setPositiveButton("确定",new DialogInterface.OnClickListener(){
@Override
public void onClick(View view){
getActivity.onBackPressed();
//回调
if(listener!=null){
listener.refresh();
}
}
});
}
A板块
/*
*Fragment A,利用acticity获取到FragmentB的对象
*保证获取到的fragmentB和跳转的fragmentB是同一个对象
*/
fragB.setOnRefreshListener(new onRefreshListener(){
public void refresh(){
//列表刷新的业务
}
});