【发布时间】:2014-04-24 07:26:12
【问题描述】:
在不同类的片段中调用方法的最佳方式是什么?我通过getActivity() 将上下文传递到班级。类似于
((Fragment) ((Activity) context).getMainFragment()).Method();
这看起来不太对......
【问题讨论】:
标签: android fragment android-context
在不同类的片段中调用方法的最佳方式是什么?我通过getActivity() 将上下文传递到班级。类似于
((Fragment) ((Activity) context).getMainFragment()).Method();
这看起来不太对......
【问题讨论】:
标签: android fragment android-context
我认为你可以这样做:
创建接口OnMyDialogClickListener和类MyDialogFragment,会调用创建接口的方法
public class MyDialogFragment extends DialogFragment {
private OnMyDialogClickListener listener;
public static DialogFragment newInstance(OnMyDialogClickListener listener) {
DialogFragment fragment = new MyDialogFragment(listener);
return fragment;
}
private MyDialogFragment(OnMyDialogClickListener listener) {
this.listener = listener;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
....
dialog.findViewById(R.id.button).setOnClickListener(new DialogButtonsClickListener);
return dialog
}
private final class DialogButtonsClickListener implements View.OnClickListener {
@Override
public void onClick(View view) {
listener.Method();
}
}
public static interface OnMyDialogClickListener {
void Method();
}
}
在目标片段中实现接口:
public class AlbumsFragment extends BaseFragment implements OnMyDialogClickListener {
.....
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
//show dialog
DialogFragment myDialogFragment = MyDialogFragment.newInstance(this);
myDialogFragment.show(getFragmentManager(), ALBUM_ACTION_TAG);
}
@Override
public void Method() {
//some code
}
}
【讨论】:
这取决于你在做什么。
如果操作是从 Fragment 发出的,则应将 Fragment 实例传递给执行该操作的类或方法。
如果这是一个像“用户退出”或“SD卡被移除”这样的事件,你应该发送一个本地广播并在片段中注册一个广播接收器。
【讨论】:
我经常使用的两种方法:
//#1 interface method in turn calls fragment;
((SomeInteraceOrSuperClass) getActivity).intefaceMethod();
//#2 hashmap = fragment directory;
TitleFrag titlefrag = (TitleFrag) getActivity().m_mapFrags.get(KEY_TITLEFRAG);
titleFrag.method();
【讨论】:
这样 -> https://developer.android.com/training/basics/fragments/communicating.html(接口和魔法)
请经常检查 Android 开发人员。它包含许多关于良好实践的遮阳篷。
【讨论】: