如何从静态方法显示Dialog

如何从静态方法显示Dialog,第1张

概述在我使用cocos2dx为Android和IOS完成的游戏中,我必须显示视频(适用于Android).我打算在Dialog中展示它(在游戏视图的顶部).问题是,我没有任何Activity参考showDialog(因为Dialogs只能在Activities中显示).尽管如此,在cocos2dxlib文件夹中,有一个Cocos2dxActivity,但我没有得到如

在我使用cocos2dx为Android和IOS完成的游戏中,我必须显示视频(适用于AndroID).我打算在Dialog中展示它(在游戏视图的顶部).问题是,我没有任何Activity参考show Dialog(因为Dialogs只能在ActivitIEs中显示).尽管如此,在cocos2dx lib文件夹中,有一个Cocos2dxActivity,但我没有得到如何使用它.从C代码,我从java类调用静态方法,如下所示

voID LMJNICommunicator::showVIDeo(){     LOGD("initialiseDatabase insIDe LMJNICommunicator");     jmethodID methodID = 0;     jnienv *pEnv = 0;     pEnv = getjnienv();     jclass ret = pEnv->FindClass("com/mobinius/lostmonstersclass/LMDatabaseDataManager");     methodID = pEnv->GetStaticmethodID(ret, "showVIDeo", "()V");     if (! methodID)     {          LOGD("Failed to find static method ID of %s", "showVIDeo");          return;     }     pEnv->CallStaticVoIDMethod(ret,methodID);     pEnv->DeleteLocalRef(ret);}

我从C代码调用的静态方法(在普通的java类中)

Class LMDatabaseDataManager {    public static voID showVIDeo() {         Dialog dialog = new Dialog(Cocos2dxActivity.getInstance());         dialog.show();        // getting Can't create handler insIDe thread that has not called Looper.prepare() error    }}

我试图像this一样使用Handler但是没有得到结果(在该帖子中得到了相同的错误).
还尝试获得像this这样的静态上下文.

那么,我的方式是否正确?如果不正确,请建议一种方法如何实现相同的.谢谢.

编辑:

终于得到了答案.之前我尝试使用应用程序静态上下文在UI线程上运行,如this链接,但没有得到…使用Cocos2dxActivity活动实例我得到了它.

Class LMDatabaseDataManager {    public static voID showVIDeo() {            Cocos2dxActivity.getInstance().runOnUiThread(new Runnable() {        @OverrIDe        public voID run() {            // Todo auto-generated method stub            Dialog dialog = new Dialog(Cocos2dxActivity.getInstance());            dialog.show();                    }    });    }}

解决方法:

尝试在Cocos2dxActivity中添加适当的行:

public class Cocos2dxActivity extends Activity {    private static Cocos2dxActivity instance = null;   @OverrIDe public voID onCreate(Bundle b) {     ...     this.instance = this;     }     public static Cocos2dxActivity getInstance() {        return instance;     }}

当您想要创建对话框时:

if (Cocos2dxActivity.getInstance() != null)  {    AlertDialog dialog = new AlertDialog(Cocos2dxActivity.getInstance());    // rest of your dialog code goes here}
总结

以上是内存溢出为你收集整理的如何从静态方法显示Dialog全部内容,希望文章能够帮你解决如何从静态方法显示Dialog所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1109989.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存