问题描述
这是我的要求: 我是将一个HTML文件加载到WebView上.我在HTML文件中有一个按钮以选择日期.当我单击该按钮时,我想打开Android Date Picker对话框.选择日期后,我想在HTML文件中显示所选日期.谁能指导我.请. html:
<input type="button" value="Select Date" onClick="openDatePickerDialog()" /> <p id = "date">--</p>
javascript:
function openDatePickerDialog() { AndroidFunction.openDatePickerDialog(); } function callFromActivity(date) { document.getElementById('date').innerHTML = date; }
我的活动:
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; } } }
问题:我在单击按钮时不会获得datepicker对话框.我要在哪里出错?我的方法正确吗?
推荐答案
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(); }
您可以尝试一次.
其他推荐答案
这是我使用的示例代码,在此处从代码派生出来:
在HTML代码中,添加2个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; }
标签是要完成的输入表单的ID.您将其称为JavaScript函数:
<input name="vDate" type="text" size="11" /> <input name="Submit" type="button" onclick="f_CallCalendar('vDate')" value="Calendrier*" />
这是实现的Java代码.请注意,MyJavaScript Interface在主动脉中声明:
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
这就是它.希望这可以帮助您.
问题描述
Here is my requirement : I'am loading one html file on to a WebView. I have a button in html file to select the date. When i click on that button i want to open android date picker dialog. And after selecting the date, i want to display the selected date in html file. Can anyone guide me. please. HTML :
<input type="button" value="Select Date" onClick="openDatePickerDialog()" /> <p id = "date">--</p>
Javascript :
function openDatePickerDialog() { AndroidFunction.openDatePickerDialog(); } function callFromActivity(date) { document.getElementById('date').innerHTML = date; }
My Activity :
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; } } }
Problem : I'am not getting DatePicker Dialog When i click on button. Where i'am going wrong ? Is my approach correct ?
推荐答案
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(); }
can you try this once.
其他推荐答案
Here is a sample code I use do show, derived from the code here:
In the html code, add 2 javascript functions:
// 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; }
The Tag is the id of the input form to be completed. You call the javascript functions like this:
<input name="vDate" type="text" size="11" /> <input name="Submit" type="button" onclick="f_CallCalendar('vDate')" value="Calendrier*" />
And here is the java code implemented. Note that the MyJavaScriptInterface is declared inside the 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
Here is it. Hope this can help.