gpt4 book ai didi

java - DialogFragment 作为 Fragment 内的内部类(支持库 Fragment v4)

转载 作者:行者123 更新时间:2023-12-01 06:07:35 24 4
gpt4 key购买 nike

我有两个 fragment Fragment AFragment B ,两个 fragment 都定义了 interfaces用于通信和ActivityMain已经实现了这两个接口(interface)。

Fragment A 的示例代码

public class FragmentA extends Fragment
{
public interface myInterface
{
doSomethingFromFragmentA();
}
private myInterface listener;
@Override OnAttach(Context activity)
{
listener=(myInterface) activity;
}
}

Fragment B 的示例代码

    public class FragmentA extends Fragment
{
public interface myInterfaceforB
{
doSomethingFromFragmentB();
}
private myInterfaceforB listener;
@Override OnAttach(Context activity)
{
listener=(myInterfaceforB) activity;
}

private DialogFragment dialog=new DialogFragment()
{
@Override
public Dialog onCreateDialog(Bundle bundle)
{
//in this dialog creating a AlertDialog and calling doSomethingFromFragmentB() from dialog ok button
}

}

我已经显示了 Fragments 的示例代码,你们应该假设我已经在 ActivityMain 中实现了接口(interface).

你已经注意到我有一个 innerclassFragmentB这是 fragment 的另一种类型。在 DialogFragment我试图调用“确定”按钮FragmentB ActivityMain.上的接口(interface)方法我有两个问题:

第一:DialogFragment在里面FragmentB ,所以FragmentB是它的父级,而不是 ActivityMain 。从这种内部调用接口(interface)实现的方法DialogFragment ?这在概念上如何与主机通信 Activity (在本例中为祖 parent )

第二:它还给了我一个错误,即由于某些 fragment 保留问题,内部 fragment 应该是静态的,但是当我将其设为静态时,我还必须将监听器变量设为静态,因为我在此 DialogFragment 中使用监听器变量。但它仍然给我以下错误

Fragment null must be a public static class to be properly recreated from instance state

最佳答案

实现您自己的 DialogFrament 并要求您的实现构造函数具有将在您的 fragment 中触发的回调。

public class MyDialog extends DialogFragment{

MyInterface mi;

MyDialog(MyInterface mi){
this.mi = mi;
}

// on some action mi.yourCallBack();
}

因此,当您初始化对话框 fragment 时,将一个接口(interface)传递给它,您将收到对 fragment 操作的回调。

关于java - DialogFragment 作为 Fragment 内的内部类(支持库 Fragment v4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41211250/

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