Mostra Android DatePicker con un clic di un pulsante in Javascript

Ecco il mio requisito: sto caricando un file html su una WebView. Ho un pulsante nel file html per selezionare la data. Quando clicco su quel pulsante voglio aprire la finestra di dialogo di selezione data di Android. E dopo aver selezionato la data, voglio visualizzare la data selezionata nel file html. Qualcuno può guidarmi. per favore. HTML:

 

--

Javascript:

  function openDatePickerDialog() { AndroidFunction.openDatePickerDialog(); } function callFromActivity(date) { document.getElementById('date').innerHTML = date; } 

La mia attività:

  public class MainActivity extends Activity { WebView myBrowser; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myBrowser = (WebView)findViewById(R.id.mybrowser); final MyJavaScriptInterface myJavaScriptInterface = new MyJavaScriptInterface(this); myBrowser.addJavascriptInterface(myJavaScriptInterface, "AndroidFunction"); myBrowser.getSettings().setJavaScriptEnabled(true); myBrowser.loadUrl("file:///android_asset/test.html"); } public class MyJavaScriptInterface { private int mYear; private int mMonth; private int mDay; static final int DATE_DIALOG_ID = 0; Context mContext; MyJavaScriptInterface(Context c) { mContext = c; } public void openDatePickerDialog() { Calendar c = Calendar.getInstance(); mYear = c.get(Calendar.YEAR); mMonth = c.get(Calendar.MONTH); mDay = c.get(Calendar.DAY_OF_MONTH); //updateDisplay(); showDialog(DATE_DIALOG_ID); } private void updateDisplay() { String date = new StringBuilder().append(mMonth + 1).append("-") .append(mDay).append("-") .append(mYear).append(" ").toString(); Toast.makeText(getApplicationContext(), date, Toast.LENGTH_LONG).show(); myBrowser.loadUrl("javascript:callFromActivity(\""+date+"\")"); } private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { mYear = year; mMonth = monthOfYear; mDay = dayOfMonth; updateDisplay(); } }; protected Dialog onCreateDialog(int id) { switch (id) { case DATE_DIALOG_ID: return new DatePickerDialog(MainActivity.this, mDateSetListener, mYear, mMonth, mDay); } return null; } } } 

Problema: non ricevo la finestra di dialogo DatePicker Quando clicco sul pulsante. Dove sbaglio? Il mio approccio è corretto?

 public void openDatePickerDialog() { Calendar c = Calendar.getInstance(); mYear = c.get(Calendar.YEAR); mMonth = c.get(Calendar.MONTH); mDay = c.get(Calendar.DAY_OF_MONTH); //updateDisplay(); DatePickerDialog dp = new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay); dp.show(); } 

puoi provarlo una volta

Ecco un esempio di codice che uso mostra, derivato dal codice qui:

Nel codice html, aggiungi 2 funzioni javascript:

 // Fonction d'appel calendrier Android function f_CallCalendar(Tag) { MSSAndroidFunction.openDatePickerDialog(Tag); } // Fonction de retour de la date function callFromActivity_RetDate(Tag, data) { document.Form.vDate.value = data; } 

Il Tag è l’id del modulo di input da completare. Chiami le funzioni javascript in questo modo:

    

E qui è implementato il codice java. Si noti che MyJavaScriptInterface è dichiarato all’interno di MainActivity:

 public class MainActivity extends Activity implements TextWatcher{ WebView MainWebView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MainWebView = (WebView)findViewById(R.id.main_webview); MainWebView.getSettings().setJavaScriptEnabled(true); final MyJavaScriptInterface myJavaScriptInterface = new MyJavaScriptInterface(this); MainWebView.addJavascriptInterface(myJavaScriptInterface, "MyJavaScriptInterface"); } // Classe de prise en charge du java privé public class MyJavaScriptInterface { public String m_szTagId; Context mContext; MyJavaScriptInterface(Context c) { mContext = c; } public void openDatePickerDialog(String szTagId) { m_szTagId = szTagId; Calendar c = Calendar.getInstance(); DatePickerDialog dp = new DatePickerDialog(mContext, new OnDateSetListener() { public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { String szDate = String.format("%02d/%02d/%04d", dayOfMonth, monthOfYear+1, year); MainWebView.loadUrl("javascript:callFromActivity_RetDate(\""+m_szTagId+"\", \""+szDate+"\")"); } }, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)); dp.show(); } } // Class MyJavaScriptInterface } // class MainActivity 

Eccolo. Spero che questo possa aiutare.