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 按钮定义 onClick() 方法。查看代码,我不明白您为什么要这样做......但同时,您的循环条件 (i==j) 仅适用于循环的第一次迭代。J 在循环外设置为 i,所以循环第一次运行,j 增加 1(j=j+1),下一次迭代检查条件,i 仍然是它的原始值,所以 j 不再匹配到我,所以这个循环只会运行一次。

于 2012-11-05T16:49:55.817 回答
0

那么,您想要的是每次按下按钮时增加“i”的值,然后更改名称视图上的文本?试试这个:

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 中使用变量时,它必须是最终的。

于 2012-11-05T17:04:54.637 回答