Android方法永久性地更改变量

时间:2016-06-25 13:32:46

标签: android variables methods

我有这种方法,我不明白。 2个对这个问题很重要的全局变量:

-mNextButton; -mCurrentIndex;

mNextButton.setOnClickListener(new View.OnClickListener() {
            @Override

            public void onClick(View v) {

              mCurrentIndex = (mCurrentIndex + 1) % mQuestionBank.length;

             int questionID = nameOfArray[mCurrentIndex].getQuestion();
        mQuestionTextView.setText(question);
            }
        });

每次用户点击mNextButton时,mCurrentIndex是如何永久增加的?

3 个答案:

答案 0 :(得分:1)

尝试更具体。你真正知道什么? 在您的代码中,您设置了一个回调,当用户按下按钮时将调用该回调。在那段代码中你更新了你的“全局”变量(因为java没有全局变量,我会假设你的意思是活动中的类字段变量)

mCurrentIndex = (mCurrentIndex + 1) % mQuestionBank.length;

这将完全按照特定更新mCurrentIndex - 当值增加超过mQuestionBank.length时,它会增加1的索引并折叠它。 %是标准modulo operator

要获得更多理解,请查看您的mQuestionBank.length参数或撰写更好的问题。祝好运。

答案 1 :(得分:0)

要解决此问题,您需要设置一个局部变量。所以在你的onClick方法中: -

int mCIndex = mCurrentIndex;

mCIndex = (mCIndex + 1) % mQuestionBank.length;



   int questionID = nameOfArray[mCIndex].getQuestion();
    mQuestionTextView.setText(question

);

多数民众赞成

答案 2 :(得分:0)

mCurrentIndex的值设置为

的值
(mCurrentIndex+1) % mQuestionBank.length

每次点击mNextButton。 该值取决于mCurrentIndex和mQuestionBank的长度。要解释该操作,请查看模运算符:

https://en.m.wikipedia.org/wiki/Modulo_operation

简短地说: 例如,如果mCurrentIndex的值为4,则增加1,得到5。 现在,这取决于你的mQuestionBank的长度。如果它是2000,它将有0-1999个残差类。您在2000年以模为单位的每个数字都属于这些类中的一个。 因此,如果你操作0 mod 2000等于0,因为0除以2000没有余数。 1 mod 2000是1,因为1除以2000是0,余数为1.而5 mod 2000将等于5。 在您的情况下:mCurrentIndex将随着每次点击而增加,直到

mCurrentIndex+1 = mQuestionBank.lenght 

因为那时它将再次从0开始。因为,在这个例子中,2000 mod 2000是1,没有余数。