gpt4 book ai didi

java - android 从 fragment 调用 MainActivity 函数

转载 作者:行者123 更新时间:2023-12-01 20:26:53 25 4
gpt4 key购买 nike

我是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com