2011-05-30 54 views
0

我有一个webview,我将通过它显示TimePicker并获取所选时间的值。 但它没有得到最近的选定时间,它总是得到前一个。我知道它的android侧的回调操作,但我该如何解决这个问题。在TimePicker更新到webview时立即更新

我的代码如下:

public class WebViewTest extends Activity { 
/** Called when the activity is first created. */ 
WebView webview; 
private int mHour; 
private int mMinute; 
static final int TIME_DIALOG_ID = 0; 

String mTimeDisplay; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    webview = (WebView) findViewById(R.id.webview); 

    webview.addJavascriptInterface(new JavaScriptInterface(), "Android");   
    WebSettings webSettings = webview.getSettings(); 

    webSettings.setSavePassword(false); 
    webSettings.setSaveFormData(false); 
    webSettings.setJavaScriptEnabled(true);   

    webview.loadUrl("file:///android_asset/Test.html"); 
} 
@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case TIME_DIALOG_ID: 
     return new TimePickerDialog(this, 
       mTimeSetListener, mHour, mMinute, false); 
    } 
    return null; 
} 
// updates the time we display in the TextView 
    private void updateDisplay() { 

     mTimeDisplay= new StringBuilder().append(pad(mHour)).append(":").append(pad(mMinute)).toString();      

    } 

    private String pad(int c) { 
     if (c >= 10) 
      return String.valueOf(c); 
     else 
      return "0" + String.valueOf(c); 
    } 

private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() { 
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
     mHour = hourOfDay; 
     mMinute = minute; 
     updateDisplay();   

     StringBuilder buf=new StringBuilder("javascript:settime("); 

     buf.append(mTimeDisplay);   
     buf.append(")"); 

     webview.loadUrl(buf.toString()); 

    } 
}; 
public class JavaScriptInterface {  
    public String ShowTimePicker()throws JSONException {    

     showDialog(TIME_DIALOG_ID);  

     JSONObject json=new JSONObject(); 

     json.put("lat", mTimeDisplay); 

     return(json.toString()); 
    } 



} 

}

而且这里去我的HTML和JS代码:

<script type="text/javascript"> 

function settime(lat) { 
document.getElementById("lat").innerHTML=lat; 
} 
function Show() 
{ 
//var t=Android.ShowTimePicker(); 
var location=JSON.parse(Android.ShowTimePicker()); 
document.getElementById("lat").innerHTML=location.lat;   
} 
</script> 


Time: <span id="lat">(unknown)</span> 
<input type="button" onclick="Show()" value="Show" /> 

回答

1

更新在updateDisplay(用户界面)method.Currently你只是更新日期。 放这条线

webview.loadUrl(buf.toString()); 

in updateDisplay()method。

+0

它不工作...可能是没有区别这行在updateDisplay()方法。 – 2011-05-30 08:27:29

+0

我得到了问题,问题出现在Javascript调用中。 – 2011-05-30 13:41:02

+0

我发现问题是与asp.net页面,如果我使用Html页面,然后它的作品。 – 2011-06-24 10:14:55

0

尝试把webview.LoadUrl(“javascript:Show();”);