0

以下のロジックを使用して、配列 names[] を反復処理し、ボタンのクリック時に別の結果を表示しています。

i = intent.getIntExtra(MainActivity.EXTRA_INDEX, 0);
    j = i;

while (i==j)
    {
        j=j+1;
    final TextView nameView = (TextView) findViewById(R.id.vNames);
    String vName = names[i];
    nameView.setText(vName);

    Button nextButton = (Button) findViewById(R.id.nextButton);
    nextButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            i=i+1;
            return;
        };
    });
    }

私の問題は、新しい値で onClick メソッドから抜け出すことです。コードが onClick 内で動かなくなっています。(コードのさまざまな場所で System.out.println() を使用して何が起こっているかを確認しました。)上記を使用しました

public void onClick(View v) {
            i=i+1;
            return;
        };

メソッドはエラーなしで実行されますが、結果は得られません。私も次のようなことを試しました

public int onClick(View v) {
            i=i+1;
            return i; //or return int i;
        };

しかし、これにより「戻り値の型は View.OnClickListener.onClick(View) と互換性がありません」というエラーが表示されます。

この方法または代替方法に対処する方法についてのアイデアをいただければ幸いです。

4

3 に答える 3

0

onClick() はシステムによって呼び出されるため、値が返されたとしても、それを取得する方法はありません。システムのコンポーネントである、呼び出された場所に返されます。

必要なことは、onClick() メソッドの範囲外の値、つまりクラスのメンバーを定義し、メソッド内から設定することです。その後、その値はメソッド呼び出し間で保持されます。

また、while ループ内で nextButton Button の onClick() メソッドを何度も何度も定義していることも指摘したいと思います。コードを見ると、なぜそれをしたいのかわかりません...しかし同時に、ループ条件 (i==j) はループの最初の反復に対してのみ真です。J はループ外で i に設定されるため、ループが最初に実行され、j が 1 ずつインクリメントされ (j=j+1)、次の反復で条件がチェックされます。i は元の値のままであるため、j は一致しなくなります。したがって、このループは 1 回だけ実行されます。

于 2012-11-05T16:49:55.817 に答える
0

では、ボタンを押すたびに「i」の値を増やしてから、nameview のテキストを変更しますか? これを試して:

nextButton.setOnClickListener(new OnClickListener(){
   public void onClick(View v) {
        i++;
        nameView.setText(names[i]);
    };
});

ただし、最終的には名前が不足します。最初から値を繰り返したい場合は、これを試してください:

nextButton.setOnClickListener(new OnClickListener(){
   public void onClick(View v) {
        i++;
        nameView.setText(names[i%names.length]);
    };
});
于 2012-11-05T16:50:54.290 に答える
0

メソッドを使用してみてください:

public class MainActivity extends Activity {
private int i;

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

    Button b = (Button) findViewById(R.id.button1);
    final TextView tv = (TextView) findViewById(R.id.textView1);
    this.i = 3;

    b.setOnClickListener(new OnClickListener() {

        public void onClick(View arg0) {
            incrementI();
            tv.setText(Integer.valueOf(i).toString());
        }
    });
    }

    public void incrementI()
    {
        this.i = this.i + 1;
    }
}

値をインクリメントするメソッドを呼び出すことができます。

public int onClick(View v) {
            i=i+1;
            return i; //or return int i;
        };

整数を返す onClick() というメソッドがないため、これは機能しません。OnClickListener で変数を使用する場合、それは final でなければなりません。

于 2012-11-05T17:04:54.637 に答える