0

ユーザーがボタンをクリックしてTextViewを対応する文字列に変更する単純なアプリを作成していますが、最初のifステートメントが実行されると、次のifステートメントが実行されません。

if (index == 0 && index > -1 && index < 5) {
  one.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
      index++;
      text1.setText("1");
    }
  });

これは私の最初のifステートメントであり、TextViewを「1」に設定してから、整数の「index」に追加する必要があります。これにより、インデックスの値が「1」になり、修飾されなくなったため、このステートメントが終了します。次のifステートメントを開始します。

if (index == 1 && index > -1 && index < 5) {
  one.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
      text2.setText("1");
      index++;
    }
  });

前のifステートメントがインデックスの変数を「1」に設定しているため、このifステートメントは開始し、前のステートメントは終了するはずですが、そうではありません。変数が修飾されなくなっても、停止せず、次のifステートメントは停止しません。始める。ifステートメントが無視されているかのようです。

アップデート。

問題を修正し、コードを次のように変更しました。

one.setOnClickListener(new View.OnClickListener(){public void onClick(View v){
  if(index == 0){
    text1.setText("1");
    index++;
  }else if(index == 1){
    text2.setText("1");
    index++;
  }else if(index == 2){
    text3.setText("1");
    index++;
  }else if(index == 3){
    text4.setText("1");
    index++;
  }
}});
4

6 に答える 6

3

それは、ステートメントが機能する場合の方法ではありません。条件が偽になった場合、制御フローが突然ブロックを離れて、真の条件で他のifブロックにジャンプすることはありません。

于 2012-08-28T14:38:27.440 に答える
3

あなたのifステートメントから

if (index == 0 && index > -1 && index < 5)

それだけ

if (index == 0) 

十分です

2番目のものと同じです。

if (index == 1) 
于 2012-08-28T14:36:47.637 に答える
2

問題は、index++ステートメントがonClickコールバック内にあることです。したがって、このコードはボタンがクリックされるまで実行されません。その時までに、2番目のifステートメントは長く実行されます。言い換えると:

最初のifステートメントがtrueの場合、これによりonClickボタンにリスナーが追加されます。2番目のステートメントは誤りです。これは何もしません。ユーザーがボタンをクリックします。これで、最初のコールバック内のコードのみが実行されます。indexが増加し、テキストが「1」に設定されます。以上です。

[編集これはおそらくあなたが望むものです]

one.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        if ( index == 0 ) {
            index++;
            text1.setText("1");
        } else if (index == 1 ) {
            text2.setText("1");
            index++;
        }
    }
});
于 2012-08-28T14:41:56.650 に答える
0

インデックス==1またはインデックス==0の後、他の条件の関連性は何ですか?

于 2012-08-28T14:39:13.577 に答える
0

それが機能しない理由は、リスナーがおそらく「onLoad」メソッドまたはクラスのコンストラクターに追加されているためです。

setOnClickListenerはifステートメントで囲まれているため、ステートメントがtrueの場合にのみリスナーのみが設定されます。あなたの場合、最初のステートメントは真ですが、2番目のステートメントは偽です。

これは、最初のリスナーのみが追加され、ボタンがクリックされるたびにが呼び出されることを意味しますtext1.setText("1")

ifステートメントは、リスナーを設定するロジックではなく、onClickListener内に配置する必要があります。したがって、次のコード:

  if (index == 0 && index > -1 && index < 5) {
        one.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                index++;
                text1.setText("1");

            }
        });

する必要があります

one.setOnClickListener(new View.OnClickListener() {
  public void onClick(View v) {
    if (index == 0) {
      index++;
      // Do stuff
    } else if(index == 1) {
      index++;
      // Do stuff
    }
  });
}

ユーザーがボタン「one」を押すたびに、onClickが呼び出されます。onClick内でステートメントが計算され、正しい「Dostuff」が実行されます。

于 2012-08-28T14:42:23.950 に答える
0

別の実行可能な解決策:

if ((index > -1) && (index < 5)) {
    one.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            text2.setText(index.toString());
            index++;
    }
});

-明らかに、これは特に必要なロジックによって異なります。インデックス== 0のときに別のオカレンスが必要な場合は、次の形式を変更する必要があります。

if (index == 0) {
    //Whatever you want to do here... eg:
    one.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            text2.setText("0");
            index++;
        }
    });
}
else if ((index > -1) && (index < 5)) {
    one.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            text2.setText(index.toString());
            index++;
    }
});
于 2012-08-28T15:01:38.063 に答える