gpt4 book ai didi

android - 无法在 android 中从 Fragment 运行 ShowcaseView

转载 作者:太空狗 更新时间:2023-10-29 15:30:41 25 4
gpt4 key购买 nike

我使用来自 here 的最新版本的 ShowcaseView

当我尝试将它与演示应用程序和 Activity 一起使用时,它可以正常工作,但是当我尝试将它与 fragment 一起使用时,它使我的应用程序崩溃并且没有 logcat 错误

     @override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);

final ImageButton saveButton = (ImageButton) view.findViewById(R.id.button_Save);
ViewTarget viewTarget = new ViewTarget(saveButton);

showcaseView = new ShowcaseView.Builder(getActivity())
.setTarget(viewTarget)
.setContentTitle("Reset Button")
.setContentText("This will erase all the data in the table except the line that in progress")
.build();
}

这可能是什么问题?

编辑 1:

当我尝试在我的 fragmentactivity 中做同样的事情但没有成功时,但是当我做同样的事情但采用了在 fragmentactivity 而不是在 fragment 中声明的 View 时它起作用了。

编辑 2:我设法从 logcat 中获取了错误。

FATAL EXCEPTION: main
java.lang.IllegalArgumentException: width and height must be > 0
at android.graphics.Bitmap.createBitmap(Bitmap.java:724)
at android.graphics.Bitmap.createBitmap(Bitmap.java:703)
at android.graphics.Bitmap.createBitmap(Bitmap.java:670)
at com.github.amlcurran.showcaseview.ShowcaseView.updateBitmap(ShowcaseView.java:169)
at com.github.amlcurran.showcaseview.ShowcaseView.onGlobalLayout(ShowcaseView.java:343)
at android.view.ViewTreeObserver.dispatchOnGlobalLayout(ViewTreeObserver.java:839)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2050)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1249)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6364)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:791)
at android.view.Choreographer.doCallbacks(Choreographer.java:591)
at android.view.Choreographer.doFrame(Choreographer.java:561)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:777)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5419)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
at dalvik.system.NativeStart.main(Native Method)

我理解错误,但错误的原因是什么?

最佳答案

在我看来,最好的解决方案是将代码放在 View 的“post”回调中,这样它将在所有内容呈现时执行。

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.post(new Runnable() {
@Override
public void run() {
// your showcase initialisation code here
showcase();
}
});
}

我对其进行了测试,效果非常好。

关于android - 无法在 android 中从 Fragment 运行 ShowcaseView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23570284/

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