2012-03-22 7 views
3

PhoneGapアプリケーションで次のコードを使用しています。PhoneGapフレームワークのnavigator.notification.confirmのボタンの順序

 function registrationCallBack(button){ 
      if(button == 2) { 
       window.location.href = "login.html"; 
      } 
     } 

    navigator.notification.confirm("Are you sure ?", registrationCallBack, "Confirmation", "Cancel, Ok"); 

ボタンの順番はiPhoneで「キャンセル」と「OK」と正しくなっています。 しかし、Androidの場合、ボタンの順序は逆です。それが「OK」、次に「キャンセル」となります。

その結果、コールバックメソッドでボタンのインデックスが変更されています。

iPhone Screenshot android Screenshot

すべての提案を歓迎している:)

おかげで、

+0

私はこれを追跡するためのバグを作成しました。https://issues.apache.org/jira/browse/CB-889 –

+0

Androidの大きな頭脳によると、その "機能"はバグではありません。 – DaveWalley

+0

ユーザーは特定のプラットフォーム上の特定の場所のボタンを期待しているので、これを「修正」したくないかもしれません。 –

答えて

2

には、以下のソリューションを使用してみてください:

function showConfirm(message, callback, buttonLabels, title){ 

    //Set default values if not specified by the user. 
    buttonLabels = buttonLabels || 'OK,Cancel'; 

    title = title || "default title"; 

    //Use Cordova version of the confirm box if possible. 
    if(navigator.notification && navigator.notification.confirm){ 

      var _callback = function(index){ 
       if(callback){ 
        callback(index == 1); 
       } 
      }; 

      navigator.notification.confirm(
       message,  // message 
       _callback, // callback 
       title,  // title 
       buttonLabels // buttonName 
      ); 

    //Default to the usual JS confirm method. 
    }else{ 
     invoke(callback, confirm(message)); 
    } 
} 

そして、ここでは、あなたがそれを使用する方法です。

var message = "Would you like to proceed?"; 
var title = "Important Question"; 

//The first element of this list is the label for positive 
//confirmation i.e. Yes, OK, Proceed. 
var buttonLabels = "Yes,No"; 

var callback = function(yes){ 
    if(yes){ 
     alert('Proceed'); 
    }else{ 
     alert('Do Not Proceed'); 
    } 
}; 

showConfirm(message, callback, buttonLabels, title); 
+0

あなたは 'var _callback = function(index){ if(callback){ コールバック(index == 1); } }; '??これは常に1をコールバック関数に返しますか? – Federico

+1

コールバックを使用すると、ボタンのインデックスがブール値に変換されます。例えば、イエス・ボタンはインデックス1にあるので、ユーザがイエス・ボタンを押すと、 'index == 1'は' true 'と等しくなります。 – Zorayr

0

私はこれをiPhoneで試していません。しかし、これをアンドロイドで試しました。私はphonegap 1.4.1でこのような問題に直面しませんでした。したがって、私はあなたのphonegapのバージョンをアップグレードすることをお勧めします。直面する問題は、新しいリリースで修正される可能性があります。 :)

2

これは問題ではありません。これまでに得たことは、それぞれのプラットフォームのネイティブ動作です。 iOSでは "キャンセル"ボタンが左側に表示され、Androidでは右側に表示されます。問題がボタンインデックスのみである場合は、コード内で問題を処理できます。しかし、画面上のボタンの順序を変更することはできません。

0

私はちょっと遅いですが、私は同じ問題を抱えていましたが、私がしたことは周囲を変えていたので、「キャンセル」は「OK」、「キャンセル」は「OK」です。それは私のために働いた。