在Android开发中,片段(Fragments)是可重用的UI组件
假设你有两个片段:FragmentA
和 FragmentB
。你想从 FragmentA
调用 FragmentB
中的方法。
首先,在 FragmentB
中创建一个接口,该接口将包含你想要从其他片段调用的方法。
public class FragmentB extends Fragment {
private OnMethodCallListener mListener;
public interface OnMethodCallListener {
void onMethodCalled();
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnMethodCallListener) {
mListener = (OnMethodCallListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnMethodCallListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
// 这是你想要从其他片段调用的方法
public void someMethodInFragmentB() {
// ...
}
}
让托管这两个片段的 Activity
实现 OnMethodCallListener
接口,并实现接口中的方法。
public class MainActivity extends AppCompatActivity implements FragmentB.OnMethodCallListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ...
}
@Override
public void onMethodCalled() {
FragmentB fragmentB = (FragmentB) getSupportFragmentManager().findFragmentById(R.id.fragment_b);
if (fragmentB != null) {
fragmentB.someMethodInFragmentB();
}
}
}
最后,在 FragmentA
中,调用接口方法以触发 FragmentB
中的方法。
public class FragmentA extends Fragment {
private OnMethodCallListener mListener;
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnMethodCallListener) {
mListener = (OnMethodCall▶Listener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnMethodCallListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public void callMethodInFragmentB() {
if (mListener != null) {
mListener.onMethodCalled();
}
}
}
现在,当你在 FragmentA
中调用 callMethodInFragmentB()
方法时,它会通过接口调用 FragmentB
中的 someMethodInFragmentB()
方法。
请注意,这个例子假设 FragmentA
和 FragmentB
都是由同一个 Activity
托管的。如果它们被不同的 Activity
托管,你需要根据具体情况调整代码。
领取专属 10元无门槛券
手把手带您无忧上云