混合应用程序上的原生Android UI

时间:2014-12-15 18:46:49

标签: android android-layout ibm-mobilefirst

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

我按照下面的教程,但点击文本框时没有显示datepicker。

https://developer.ibm.com/mobilefirstplatform/documentation/getting-started-6-3/adding-native-functionality/android-adding-native-ui-elements-hybrid-applications/

以下是我的测试申请:https://db.tt/tm8ihJc9

以下是单击文本框时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代码中,我创建了一个包含ActionReceiver

代码的类textboxDate
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);
}

}

1 个答案:

答案 0 :(得分:0)

addActionReceiver必须放在主要活动的onCreate方法中,而不是放在实现WLActionReceiver的类中,当然不能放在onActionReceived方法中。< / p>

您也错误地处理了将值从datePicker返回到WebView的方式...
实际上,所有的实现都是不正确的。 :/

对于您在此处尝试实现的任何内容,听起来您可能希望选择使用WL.NativePage

以下是使用WL.NativePage实施的同一项目。看看常见的\ js \ main.js和android \ nativeResources \ src \ com \ getDatePicker \ DatePickerActivity.java

https://www.dropbox.com/s/jvhlo684ulpb40c/getDateProject.zip