Android 从';onClick';
我使用下面的逻辑遍历数组names[],并在单击按钮时显示不同的结果Android 从';onClick';,android,arrays,methods,Android,Arrays,Methods,我使用下面的逻辑遍历数组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.setTex
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(视图)不兼容”
任何关于如何处理此方法或替代方法的想法都将不胜感激。onClick()由系统调用,因此即使它确实返回了一个值,您也无法获取它-它返回到调用它的位置,这是系统的一个组件
您需要做的是在onClick()方法的作用域之外定义一个值,即类的一个成员,并从方法内部设置它。然后,该值将在方法调用中保持不变
我还想指出,您正在while循环中一遍又一遍地为nextButton按钮定义onClick()方法。看看代码,我不明白你为什么要这么做。。。但同时,循环条件(i==j)仅在循环的第一次迭代中为真。J在循环外被设置为i,因此循环第一次运行,J增加1(J=J+1),下一次迭代检查条件,i仍然是它的原始值,因此J不再与i匹配,因此此循环将只运行一次。因此,您想要的是在每次按下按钮时增加“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]);
};
});
尝试使用以下方法:
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中使用变量时,它必须是最终变量。您必须了解,在您实际单击它之前,setOnClickListener不会阻塞。它会立即返回,而您的循环将永远循环,阻塞UI线程和其他所有内容。在学习android之前,您需要了解一些java
匿名类的知识,这样只有您才能理解您的问题。您还应该学习使用调试器。System.out不是一个合适的方法。谢谢,这似乎是目前最可行的解决方案(如果不是我想要的那么优雅的话)。