我有一个FragmentA,它有一个按钮DoSomething和一个监听器,它是ActivityA。 FragmentA还定义了一个InterfaceA,其中包含方法doSomething()。
ActivityA实现了InterfaceA,如下所示,显示了FragmentA(上面有按钮DoSomething)。
这是在ActivityA监听器中单击DoSomething按钮实现的代码:
@Override
public void doSomething(View v) {
if (hasRight == false){
// doShowPINDialogFragment just creates and shows PINDialogFragment
// as per code below.
// Question 1: How to make doShowPINDialogFragment() return boolean?
if (doShowPINDialogFragment() == false){
return;
}
}
// If I put break point here, I would expect to see my dialog fragment
// created in doShowPINDialogFragment() call above but I dont.
// I see fragment B loaded (replacing FragmentA), then my
// PINDialogFragment shows on top of it.
// Question 2: How to prevent loading fragment B before user enters
// correct PIN?
loadFragmentB();
}
方法doShowPINDialogFragment()将简单地创建和"显示"片段:
public void doShowPINDialogFragment(String a){
FragmentTransaction ft = getFragmentManager().beginTransaction();
Fragment prev = getFragmentManager().findFragmentByTag("doShowPINDialogFragment");
if (prev != null){
ft.remove(prev);
}
ft.addToBackStack(null);
PINDialogFragment pinDialogFragment = PINDialogFragment.newInstance(a);
pinDialogFragment.show(ft, "doShowPINDialogFragment");
}
问题是Android在显示Dialog时不会阻塞(就像C#中的ModalDialog一样)。因此,上面的方法将在显示我的PINDialogFragment之前完全执行。我想阻止调用loadFragmentB(),但只在PINDialogFragment返回true时才调用它。
我的问题是我不知道两件事:
如何使上面的doShowPINDialogFragment()返回true或false?
如果doShowPINDialogFragment()返回false,如何阻止对loadFragmentB()的调用?
我认为写这样的东西可以解决我的两个问题:
@Override
public void doSomething(View v) {
if (hasRight == false){
if (doShowPINDialogFragment() == false){
return;
} else {
loadFragmentB();
}
}
}
非常感谢。
答案 0 :(得分:0)
我明白了。
不要像上面那样写,请执行以下操作:
@Override
public void doSomething(View v) {
if (hasRight == false){
doShowPINDialogFragment();
} else {
loadFragmentB();
}
}
这样,只有当hasRight!= false时才会加载.FragmentB。但是,如果为false,则调用doShowPINDialogFragment(),它会创建并显示对话框片段,如上所述。
它还定义了一个回调接口,然后在与上面的代码相同的java文件中执行。该回调在正向按钮点击时触发,并且还将调用loadFragmentB()。