我有两个 fragment Fragment A
和Fragment 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).
你已经注意到我有一个 innerclass
在FragmentB
这是 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/