片段不隐藏
Fragment not hiding
我在我的布局中添加了一个片段,其中包含一个 Web 视图,这很有效。现在我尝试在代码的 javascript 中触发一个动作来隐藏片段本身。
我实现了一个名为 WebAppInterface 的 class,可以从 Javascript 调用它,如果我按下按钮,就会调用 hidePicker()。现在我试图隐藏片段,但没有任何反应。这是我的功能:
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
public class WebAppInterface extends FragmentActivity{
public void hidePicker(){
Log.d("CAPerm", "hide Picker");
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(android.R.animator.fade_in,
android.R.animator.fade_out);
Fragment picker = fm.findFragmentById(R.id.registrationpickerfragment);
ft.hide(picker);
ft.commit();
Log.d("CAPerm", "hidden");
}
}
片段显示在 ConstraintLayout 的 Scrollview 的 LinearLayout 中。
我收到以下控制台输出:
W/System.err: java.lang.IllegalStateException: Activity has been destroyed
W/System.err: at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:2087)
W/System.err: at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:678)
W/System.err: at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:632)
at com.mypackage.WebAppInterface.hidePicker(WebAppInterface.java:43)
at android.os.MessageQueue.nativePollOnce(Native Method)
W/System.err: at android.os.MessageQueue.next(MessageQueue.java:386)
at android.os.Looper.loop(Looper.java:169)
at android.os.HandlerThread.run(HandlerThread.java:65)
V/WindowManager: Exit animation finished in Window{fe0401a u0 com.mypackage.UserRegistration EXITING}: remove=true
E/WindowManager: win=Window{fe0401a u0 com.mypackage.UserRegistration EXITING} destroySurfaces: appStopped=false win.mWindowRemovalAllowed=true win.mRemoveOnExit=true
V/WindowManager: postWindowRemoveCleanupLocked: Window{fe0401a u0 com.mypackage.UserRegistration}
Removing Window{fe0401a u0 com.mypackage.UserRegistration} from AppWindowToken{b12e137 token=Token{266fe36 ActivityRecord{37b83d1 u0 com.mypackage.UserRegistration t6381}}}
后面的日志消息"hidden"没有执行,错误似乎发生在第43行(ft.commit())
知道为什么片段没有被删除或有一些变通方法可以更好地解决它吗?
提前致谢:)
问候克里斯蒂安
我终于能够解决我的问题:)
我在 UI 线程中创建了一个带有事件侦听器的布尔变量,如下所示:Android: Listening to variable changes - Stack Overflow 并从 WebAppInterface 函数中调用了 setBoo :)
我在我的布局中添加了一个片段,其中包含一个 Web 视图,这很有效。现在我尝试在代码的 javascript 中触发一个动作来隐藏片段本身。
我实现了一个名为 WebAppInterface 的 class,可以从 Javascript 调用它,如果我按下按钮,就会调用 hidePicker()。现在我试图隐藏片段,但没有任何反应。这是我的功能:
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
public class WebAppInterface extends FragmentActivity{
public void hidePicker(){
Log.d("CAPerm", "hide Picker");
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(android.R.animator.fade_in,
android.R.animator.fade_out);
Fragment picker = fm.findFragmentById(R.id.registrationpickerfragment);
ft.hide(picker);
ft.commit();
Log.d("CAPerm", "hidden");
}
}
片段显示在 ConstraintLayout 的 Scrollview 的 LinearLayout 中。
我收到以下控制台输出:
W/System.err: java.lang.IllegalStateException: Activity has been destroyed
W/System.err: at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:2087)
W/System.err: at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:678)
W/System.err: at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:632)
at com.mypackage.WebAppInterface.hidePicker(WebAppInterface.java:43)
at android.os.MessageQueue.nativePollOnce(Native Method)
W/System.err: at android.os.MessageQueue.next(MessageQueue.java:386)
at android.os.Looper.loop(Looper.java:169)
at android.os.HandlerThread.run(HandlerThread.java:65)
V/WindowManager: Exit animation finished in Window{fe0401a u0 com.mypackage.UserRegistration EXITING}: remove=true
E/WindowManager: win=Window{fe0401a u0 com.mypackage.UserRegistration EXITING} destroySurfaces: appStopped=false win.mWindowRemovalAllowed=true win.mRemoveOnExit=true
V/WindowManager: postWindowRemoveCleanupLocked: Window{fe0401a u0 com.mypackage.UserRegistration}
Removing Window{fe0401a u0 com.mypackage.UserRegistration} from AppWindowToken{b12e137 token=Token{266fe36 ActivityRecord{37b83d1 u0 com.mypackage.UserRegistration t6381}}}
后面的日志消息"hidden"没有执行,错误似乎发生在第43行(ft.commit())
知道为什么片段没有被删除或有一些变通方法可以更好地解决它吗?
提前致谢:)
问候克里斯蒂安
我终于能够解决我的问题:)
我在 UI 线程中创建了一个带有事件侦听器的布尔变量,如下所示:Android: Listening to variable changes - Stack Overflow 并从 WebAppInterface 函数中调用了 setBoo :)