Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从';onClick';_Android_Arrays_Methods - Fatal编程技术网

Android 从';onClick';

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

我使用下面的逻辑遍历数组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(视图)不兼容”

任何关于如何处理此方法或替代方法的想法都将不胜感激。

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不是一个合适的方法。谢谢,这似乎是目前最可行的解决方案(如果不是我想要的那么优雅的话)。