2017-12-12 10 views
-1

thisthisのようないくつかの関連する質問を読んだが、問題はintがそれ以上大きな値を保持できないということだ。私の場合はそうではありません。私の方法は常に0を返す

私は、ボタンのOnClickで以下のメソッドを呼び出していますが、それは常に0

public int showRadioAlertDialog(final Button button, String title, 
            final List<String> list, int selectedIndex) { 

     final AlertDialog.Builder builder = new AlertDialog.Builder(mContext); 
     builder.setTitle(title); 
     builder.setCancelable(false); 

     builder.setSingleChoiceItems(list.toArray(new String[list.size()]), 
       selectedIndex, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         if (which > -1) { 
          position = which; 
         } 
        } 
       }); 
     builder.setPositiveButton("Confirm", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 

       printLog("List position = " + list.get(position)); 
       if (position > -1) { 
        button.setHint(list.get(position)); 
       } 
      } 
     }); 
     builder.setNegativeButton("Cancel", null); 
     AlertDialog dialog = builder.create(); 
     dialog.show(); 

     if (position > -1) { 
      return position; 
     } else { 
      return -1; 
     } 
    } 

positionがグローバル変数で返します。
私が期待しているのは、-1または選択した位置のインデックスを返す必要があるということです。私が気づい

  1. まず最初は、ユーザーが1つの選択肢から 項目を選択する前に、それは値を返し、それは項目を選択し、ユーザー 前に何を返すべきではありません。

  2. 第二選択の前に戻ってきたら、最後に確認があります だから-1なぜ0であるべきですか?

なぜその0を説明してください。あらゆる努力が評価されるだろう。

+1

どうすればデバッグできますか?あなたの位置が更新されていないように見えますが、常に0 – canillas

+0

の位置に値を設定しないでクリックすると、常に0が返されます。 – ADM

答えて

1

あなたはこれを呼び出す:

if (position > -1) { 
    return position; 
} else { 
    return -1; 
} 

をonClickListenersを設定した後。問題は、イベントが発生したときにonClickListenersが別のスレッドから呼び出されたことです。つまり、時刻がpositionに設定されていれば、値は既に返されています。

onClickListenersを使用すると、内部クラス(またはonCLickListenerを拡張する場合はメソッド)と呼ばれるため、適切な戻り値のメソッドを取得できません。代わりにコールバックメソッドを使用してください(以下は擬似コードであり、有効ではありません。コピー貼りはしないでください):

... onClick(){ 
    callback(position); 
} 
... 


void callback(position){ 
    do whatever with the variable 
} 
1

整数変数をグローバルとして定義すると、デフォルト値が自動的に与えられ、値は0になります。あなたの場合、show()メソッド呼び出し後の条件付きコードがあります。これは、show()メソッドを呼び出した直後にコードを実行することを意味します。 0> -1ですから、あなたはいつも0を得るでしょう。これがあなたを助けてくれることを願っています。ダイアログをクリックした後に位置を追加する場合は、ダイアログのコールバックメソッドで、その変数の位置を明示的に設定する必要があります。リターンは機能しません。時間がたつにつれて、ダイアログボタンの値がすでに返されているためです。そして、なぜo返信私はすでに私の答えの初めに言及しています。

関連する問題