Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 访问Phonegap插件中UI线程上运行的对话框_Java_Android_Cordova_Phonegap Plugins - Fatal编程技术网

Java 访问Phonegap插件中UI线程上运行的对话框

Java 访问Phonegap插件中UI线程上运行的对话框,java,android,cordova,phonegap-plugins,Java,Android,Cordova,Phonegap Plugins,我是Android开发的新手,我需要实现类似于中的自定义对话框插件 虽然我已经设法实现了这个对话框的大部分功能,包括某些对话框操作上的JS回调事件,但我无法实现在显示对话框时将数据从JS发送回对话框 场景如下:当对话框的微调器更改时,调用JS回调,JS代码执行一些处理(访问sqlStorage数据等),然后我需要更新对话框的一些视图。我的当前代码(无非相关内容): CustomDialogPlugin.java: 公共类CustomDialogPlugin扩展插件{ @凌驾 公共PluginRe

我是Android开发的新手,我需要实现类似于中的自定义对话框插件

虽然我已经设法实现了这个对话框的大部分功能,包括某些对话框操作上的JS回调事件,但我无法实现在显示对话框时将数据从JS发送回对话框

场景如下:当对话框的微调器更改时,调用JS回调,JS代码执行一些处理(访问sqlStorage数据等),然后我需要更新对话框的一些视图。我的当前代码(无非相关内容):

CustomDialogPlugin.java

公共类CustomDialogPlugin扩展插件{
@凌驾
公共PluginResult执行(字符串操作、JSONArray参数、字符串回调ID){
PluginResult.Status Status=PluginResult.Status.OK;
字符串结果=”;
试一试{
if(action.equals(“show”)){
结果=此.showDialog(args.optJSONObject(0),callbackId);
// ...
}else if(action.equals(“更新”)){
this.updateData(args.optJSONObject(0));
}
}捕获(JSONException e){
// ...
}
}
//显示对话框
公共字符串显示对话框(JSONObject选项,最终字符串回调ID){
如果(选项!=null){
//处理选项
}
//在新线程中创建子对话框
Runnable Runnable=新的Runnable(){
公开募捐{
mDialog=新对话框(ctx);
//对话框布局、视图和侦听器设置
// ...
mSpinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共通道(适配器视图适配器、视图v、内部i、长lng){
// ...
//准备JSON数据以发送和调用回调
sendUpdate(已更改的事件,obj,true);
}
@凌驾
未选择公共无效(AdapterView适配器){
// ...
}
});
// ...
mDialog.show();
}
};
这个.ctx.runOnUiThread(runnable);
返回“”;
}
//创建一个新的插件结果并将其发送回JavaScript
私有void sendUpdate(int eventType、JSONObject obj、boolean keepCallback){
if(this.savedCallbackId!=null){
// ...
PluginResult结果=新的PluginResult(PluginResult.Status.OK,obj);
结果:setKeepCallback(keepCallback);
this.success(result,this.savedCallbackId);
}
}
//解析从JS和upate对话框接收的数据
受保护的字符串更新数据(JSONObject数据){
//这里我需要更新mDialog的一些视图
//无法从这里访问它们
}
}
customdialog.js

var CustomDialog=function(){};
CustomDialog.CHANGED_事件=1;
CustomDialog.prototype.show=函数(数据){
返回PhoneGap.exec(this.\u onEvent,this.\u onError,'CustomDialogPlugin','show',[data]);
};
CustomDialog.prototype.update=函数(数据){
返回PhoneGap.exec(this.\onEvent,this.\onError,'CustomDialogPlugin','update',[data]);
};
CustomDialog.prototype.\u OneEvent=函数(数据){
if(data.type==CustomDialog.CHANGED_事件和&typeof window.plugins.CustomDialog.onChange==function){
window.plugins.CustomDialog.onChange(数据);
}
// ...
};
CustomDialog.prototype.\u onError=函数(数据){
// ...
};
addConstructor(函数(){
addPlugin('customDialog',new customDialog());
});
test.html

/。。。
window.plugins.customDialog.onChange=函数(数据){
// ...
window.plugins.customDialog.update(一些其他数据);
}
我试图在
可运行的
中创建一个
处理程序
,并调用它来处理从
更新数据
发送的消息,但显然我做错了什么

也许我把事情复杂化了,有更简单的方法从JS回调完成数据更新吗


提前谢谢。

Android儿童浏览器插件的代码可能会对您有所帮助,因为它还会在PhoneGap插件中打开一个对话框

如果在主插件类中有要更新的视图的引用,则根据您试图更新的内容,您应该可以。

好的,这里有一个解决方案(使用),它最终对我有效(函数/返回值的参数与我原来的问题中的参数不同,但这仍然是我所问的函数):


感谢您的回复,
ChildBrowser
不允许在对话框启动后从外部更新对话框。当然,我曾尝试在主插件类中保存视图引用,然后在updateData方法中使用它,但我得到“只有创建视图层次结构的原始线程才能接触其视图。”错误。此链接已断开:(
protected void updateData(String data) {
    mMyEdit.post(
        new Runnable() {
            public void run() {
                mMyEdit.setText(data);
            }
        }
);
}