在Javascript中单击按钮即可显示android DatePicker
以下是我的要求: 我正在将一个html文件加载到WebView。我在html文件中有一个按钮来选择日期。当我点击这个按钮时,我想打开android日期选择器对话框。选择日期后,我想在html文件中显示所选日期。谁能指引我。请 HTML: 我的活动:在Javascript中单击按钮即可显示android DatePicker,javascript,android,html,datepicker,Javascript,Android,Html,Datepicker,以下是我的要求: 我正在将一个html文件加载到WebView。我在html文件中有一个按钮来选择日期。当我点击这个按钮时,我想打开android日期选择器对话框。选择日期后,我想在html文件中显示所选日期。谁能指引我。请 HTML: 我的活动: public class MainActivity extends Activity { WebView myBrowser; /** Called when the activity is first created. */ @Overrid
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();
}
您能试一下吗。下面是我使用的do 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*" />
给你。希望这能有所帮助。您正在设置onclicklistner以接收按钮单击事件。只有这样,您才能调用函数openDatePickerDialogBharat,如果我在openDatePickerDialog()中取消对updateDisplay()行的注释,则toast消息将被重新显示。这意味着调用了OpenDatePickerDialog()方法。DatePickerDialog(MainActivity.this,mDateSetListener,mYear,mMonth,mDay);您可以尝试使用mContext而不是MainActivity.this,您已经通过了GetApplicationContext,您也尝试了getAppContext(),但仍然没有LuckHarat,我的按钮在html文件中。不在android布局(xml)文件中。我正在查找您的问题。但它会打开一个正常的警报对话框。以下代码在openDatePickerDialog()方法中工作。AlertDialog.Builder myDialog=新建AlertDialog.Builder(MainActivity.this);myDialog.setTitle(“你好!”);设置消息(“样本测试”);myDialog.setPositiveButton(“开”,空);myDialog.show();我得到了它。我从MyJavaScriptInterface类中删除了与DatePicker相关的代码,并将其放在MainActivity中。现在它起作用了。感谢BharatNow,我知道它不会调用onCreateDialog,因为您是在一个简单的调用中实现的,而不是在activity中的activity中,实际上您重写了它,但在您的类中没有父类,因此您无法在allow中重写它。它将只是一个普通函数,而不是您可以尝试在班级。
// 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;
}
<input name="vDate" type="text" size="11" />
<input name="Submit" type="button" onclick="f_CallCalendar('vDate')" value="Calendrier*" />
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