假设我们有两个模块 Module A 和 Module B,其中 Module A 依赖 Module B。如果我们从 Module A 打开一个依赖于 Module B 的 Fragment,就会出现循环依赖的问题。解决这个问题的方法是创建一个接口,Module A 实现该接口并在其中添加一个方法,定义从 Module A 打开依赖的 Fragment;Module B 通过接口回调实现该方法,以此解决循环依赖。
以下是示例代码:
在 Module B 中的 Fragment:
public class FragmentB extends Fragment {
public interface OnFragmentInteractionListener {
void openFragmentA();
}
private OnFragmentInteractionListener mListener;
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnFragmentInteractionListener) {
mListener = (OnFragmentInteractionListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
// 在相应事件触发后调用该方法,打开依赖 Module A 的 Fragment
private void openFragmentA() {
mListener.openFragmentA();
}
}
在 Module A 中的 Activity:
public class ActivityA extends AppCompatActivity implements FragmentB.OnFragmentInteractionListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
// 打开 Module B 的 Fragment
FragmentB fragment = new FragmentB();
getSupportFragmentManager().beginTransaction().add(R.id.container, fragment).commit();
}
@Override
public void openFragmentA() {
FragmentA fragment = new FragmentA();
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment).addToBackStack(null).commit();
}
}
在 Module A 中的 Fragment A:
public class FragmentA extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_a, container, false);
return view;
}
}