混合应用程序上的原生Android用户界面

混合应用程序上的原生Android用户界面,android,android-layout,ibm-mobilefirst,Android,Android Layout,Ibm Mobilefirst,我想在基于IBM MobileFirst平台的混合应用程序中显示本机android datepicker 我遵循了下面的教程,但是当我点击文本框时,datepicker并没有显示出来 以下是我的测试应用程序: 以下是单击textbox时js文件中的代码 $('#textDate').on('click', function(){ $('#errorMsg').empty(); WL.App.sendActionToNative("setMyDate"); WL

我想在基于IBM MobileFirst平台的混合应用程序中显示本机android datepicker

我遵循了下面的教程,但是当我点击文本框时,datepicker并没有显示出来

以下是我的测试应用程序:

以下是单击textbox时js文件中的代码

$('#textDate').on('click', function(){
      $('#errorMsg').empty();

    WL.App.sendActionToNative("setMyDate");

      WL.App.addActionReceiver("myActionReceiver", function actionReceiver(received){
            if(received.action == 'setMyDate'){
                alert(received);
                $('#errorMsg').html(received.data.errorReason);
            }
      });

 });
在Java代码中,我创建了一个类textboxDate,其中包含ActionReceiver的代码

public class textboxDate extends CordovaActivity implements WLActionReceiver{
private Activity parentActivity;
DatePicker datePicker;
int hour, minute;

TextView textVw;

public textboxDate(Activity pActivity){
    parentActivity = pActivity;
}

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    setContentView(R.layout.textdate);

    WL.getInstance().addActionReceiver(new textboxDate(this));

    super.loadUrl(WL.getInstance().getMainHtmlFilePath());

    try{
    JSONObject data = new JSONObject();
    data.put("setMyDate", 12345);
    WL.getInstance().sendActionToJS("setMyDate", data);
    }catch(Exception e){

    }

}

@Override
public void onActionReceived(String action, JSONObject data) {
    if (action.equals("setMyDate" )){
        WL.getInstance().addActionReceiver(this);
        showDatePicker();
    } 

}

public void showDatePicker(){

    textVw = (TextView) findViewById(R.id.tv1);
    datePicker = (DatePicker) findViewById(R.id.datePicker1);

      final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        textVw.setText(new StringBuilder()
        // Month is 0 based, just add 1
        .append(month + 1).append("-").append(day).append("-")
        .append(year).append(" "));

    // set current date into datepicker
    datePicker.init(year, month, day, null);

}

@Override
public void onDestroy() {
    super.onDestroy();
    WL.getInstance().removeActionReceiver(this);
}
}

addActionReceiver必须放在主活动的onCreate方法中,而不是放在实现WLActionReceiver的类中,当然也不能放在onActionReceived方法中

您还错误地处理了将值从日期选择器返回到WebView的方式。。。 事实上,所有的实现都是不正确的:/

无论你想在这里实现什么,听起来你可能想选择使用

下面是同一个项目,使用WL.NativePage实现。看看common\js\main.js和android\nativeResources\src\com\getDatePicker\DatePickerActivity.java


你应该发布一些你正在做的事情的代码,我们不能帮你弄清楚。我在混合应用程序中有一个注册页面,其中包含各种文本框。在该页面外,有一个文本框包含日期信息。当我单击“输入日期”文本框时,我想打开本机android datepicker来选择日期并将所选日期返回到注册页面WebView。我只想在混合应用程序中使用一个本机UI元素datepicker。你应该把它整合到你的应用程序中。您可以在本机代码中调整从日期选择器返回的内容。好的。但在你们的项目中,当我点击链接点击选择一个日期时,本机日期选择器并没有在设备上打开。我想需要做一些调整,但是代码是合理的,并且易于使用——javascript和java。我不知道您遇到了什么错误…以下是错误:未捕获错误:已加载本机页面。无法调用其他本机页。worklight.js:15435 show worklight.js:15435 selectDate main.js:8 onclick index.html:38