我有这种方法,我不明白。 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是如何永久增加的?
答案 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,没有余数。