java - android 从 fragment 调用 MainActivity 函数

标签 java android android-fragments

我是 Android 新手,我正在尝试掌握创建和使用 fragment 的窍门。

我有一个 fragment ,显示了可供选择的多个日期的简单列表,并实现了 onClickListener。这个想法是,一旦用户选择了日期, fragment 就会将日期发送回 MainActivity,然后 MainActivity 在数据库中运行查询并将数据库响应发送到另一个 fragment 。

我陷入了将日期优雅地发送回 MainActivity 的困境。我找不到太多信息。我发现了这个:

 Activity activity = getActivity();
 if(activity instanceof MyActivity){
      MyActivity myactivity = (MyActivity) activity;
      myactivity.myMethod();
}

我对此很陌生,但这对我来说似乎很奇怪。这是正确的方法还是还有其他方法?

欢迎任何意见

最佳答案

我更喜欢基于界面的方法,因为它非常干净。您可以在 Fragment 或外部接口(interface)中声明嵌套接口(interface):

interface OnMyStuffListener {
    void myMethod();
}

创建Activity来实现该接口(interface):

public class MainActivity extends Activity implements OnMyStuffListener {
    @Override
    public void myMethod() {
        // Do whatever you want.
    }
}

Fragment 将附加到 Activity,以便您可以检查 Context 的实例并将其转换为 Activity :

public class MyFragment extends Fragment implements View.OnClickListener {
    private OnMyStuffListener mListener;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnMyStuffListener) {
            mListener = (OnMyStuffListener) context;
        } else {
            throw new IllegalArgumentException("The context " + context.getClass().getName() +
                    "must implement " + OnMyStuffListener.class.getName());
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        // Release it avoiding memory leak.
        mListener = null;
    }


    @Override
    public void onClick(View v) {
        mListener.myMethod();
    }
}

关于java - android 从 fragment 调用 MainActivity 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43747069/

相关文章:

java - Libgdx android调试崩溃

java - 加载 jar 的自定义类加载器在类文件的常量池中提供了非法的 UTF8 字符串

android - 在 Android Vision API 中切换到 Camera2

java - Android ViewPager 子 fragment 加载但选项卡不加载

android - 恢复 fragment 中的 EditText 输入

Java 可变参数在扩展时的奇怪行为

java - 停止sql注入(inject)

java - 如何将对象从一个 ArrayList 移动到另一个,避免 GC 问题

android - 如何检查卡是信用卡还是借记卡

android - 如何让 LibGDX 的 AndroidApplication 类支持 Android Fragments?