从单独的类中调用片段中的方法

时间:2014-03-18 14:28:53

标签: android fragment android-context

从不同的类调用片段内的方法的最佳方法是什么?我通过getActivity()将上下文传递给了班级。

的内容

((Fragment) ((Activity) context).getMainFragment()).Method();

这看起来并不合适......

4 个答案:

答案 0 :(得分:1)

我认为你可以这样做:

创建接口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();

}

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(); }


在目标片段中实现接口:

}

答案 1 :(得分:0)

这取决于你在做什么。

如果操作是从Fragment发出的,则应该将Fragment实例传递给执行它的类或方法。

如果这是“用户注销”或“sdcard已删除”之类的事件,则应发送本地广播并在片段中注册BroadcastReceiver。

答案 2 :(得分:0)

我经常使用的两种方法:

//#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();

答案 3 :(得分:0)

这种方式 - > https://developer.android.com/training/basics/fragments/communicating.html(界面和魔法)

请经常检查android开发人员。它包含许多关于良好实践的灵感。