2014-07-17 52 views
1

我是新手編程,並嘗試使用phonegap創建一個android應用程序。 我正在使用cordova 3.5(Phonegap Dialog Plugin)中的對話框插件來啓用提示,以從用戶獲取一些價值並將其存儲在輸入區域中。對話框插件phonegap編輯默認文本

navigator.notification.prompt(
      'Enter Value : ', // message 
      onPrompt,     // callback to invoke 
      'Input',   // title 
      ['Cancel','Options','Ok'],    // buttonLabels 
      text    // defaultText 
     ) 

默認文本是先前由用戶輸入的值。如果我想糾正一個錯字,我必須再次輸入所有內容。我該怎麼做,以便默認文本不會被覆蓋,我可以從當前值本身編輯默認文本?

發現這個鏈接:http://twigstechtips.blogspot.in/2011/10/android-allow-user-to-editinput-text.html

所以,我嘗試編輯這個文件:/plugins/org.apache.cordova.dialogs/src/android/Notifications.java

原始代碼:

public synchronized void prompt(final String message, final String title, final JSONArray buttonLabels, final String defaultText, final CallbackContext callbackContext) { 

    final CordovaInterface cordova = this.cordova; 

    Runnable runnable = new Runnable() { 
     public void run() { 
      final EditText promptInput = new EditText(cordova.getActivity()); 
      promptInput.setHint(defaultText); 
      AlertDialog.Builder dlg = new AlertDialog.Builder(cordova.getActivity()); 
      dlg.setMessage(message); 
      dlg.setTitle(title); 
      dlg.setCancelable(true); 

      dlg.setView(promptInput); 

      final JSONObject result = new JSONObject(); 

      // First button 
      if (buttonLabels.length() > 0) { 
       try { 
        dlg.setNegativeButton(buttonLabels.getString(0), 
         new AlertDialog.OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 
           dialog.dismiss(); 
           try { 
            result.put("buttonIndex",1); 
            result.put("input1", promptInput.getText().toString().trim().length()==0 ? defaultText : promptInput.getText());            
           } catch (JSONException e) { e.printStackTrace(); } 
           callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result)); 
          } 
         }); 
       } catch (JSONException e) { } 
      } 

      // Second button 
      if (buttonLabels.length() > 1) { 
       try { 
        dlg.setNeutralButton(buttonLabels.getString(1), 
         new AlertDialog.OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 
           dialog.dismiss(); 
           try { 
            result.put("buttonIndex",2); 
            result.put("input1", promptInput.getText().toString().trim().length()==0 ? defaultText : promptInput.getText()); 
           } catch (JSONException e) { e.printStackTrace(); } 
           callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result)); 
          } 
         }); 
       } catch (JSONException e) { } 
      } 

      // Third button 
      if (buttonLabels.length() > 2) { 
       try { 
        dlg.setPositiveButton(buttonLabels.getString(2), 
         new AlertDialog.OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 
           dialog.dismiss(); 
           try { 
            result.put("buttonIndex",3); 
            result.put("input1", promptInput.getText().toString().trim().length()==0 ? defaultText : promptInput.getText()); 
           } catch (JSONException e) { e.printStackTrace(); } 
           callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result)); 
          } 
         }); 
       } catch (JSONException e) { } 
      } 
      dlg.setOnCancelListener(new AlertDialog.OnCancelListener() { 
       public void onCancel(DialogInterface dialog){ 
        dialog.dismiss(); 
        try { 
         result.put("buttonIndex",0); 
         result.put("input1", promptInput.getText().toString().trim().length()==0 ? defaultText : promptInput.getText()); 
        } catch (JSONException e) { e.printStackTrace(); } 
        callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result)); 
       } 
      }); 

      dlg.create(); 
      dlg.show(); 

     }; 
    }; 
    this.cordova.getActivity().runOnUiThread(runnable); 
} 

一個變化:

  final EditText promptInput = new EditText(this); 
promptInput.setHint(defaultText); 

和第二個變化:

result.put("input1", promptInput.getText().toString().trim().length()==0 ? "" : promptInput.getText());            
           } 

但是不起作用。默認文本不能從當前值編輯,所有內容都會被覆蓋。

我需要做些什麼改變才能獲得所需的功能?

+0

你所要求的是非常模糊的。如果你是從提示發送文本,然後它的某處我們也會去替換,所以從理解你想讓以前輸入的字符串永遠保持在那裏,以便用戶可以進行更改。 – allwynmasc

+0

我在Android上遇到同樣的問題,但在iOS上可以修改默認文本。 – user276648

回答

0

我想我明白了。

您只需聲明var defaultText全局爲window並將輸入的值分配給onPrompt回調。嘗試看看是否是這樣:

window.defaultText = "enter ur stuff"; 
     var showMyPrompt = function showPrompt() {     
       navigator.notification.prompt(
       'Please enter your name', // message 
       onPrompt,     // callback to invoke 
       'Registration',   // title 
       ['Ok','Exit'],    // buttonLabels 
       defaultText     // defaultText 
      );    
     }; 

    // process the promptation dialog result 
function onPrompt(results) { 
      alert("You selected button number " + results.buttonIndex + " and entered " + results.input1); 
      defaultText = results.input1; 
     } 

因此,每當您再次點擊提示時,添加到提示符時仍然存在!無需高科技js編輯。

0

我在Android上同樣的問題,簡單地更換

promptInput.setHint(defaultText); 

通過

promptInput.setText(defaultText);