Java 如何在Android中使用“下一步”和“上一步”按钮循环数组值

Java 如何在Android中使用“下一步”和“上一步”按钮循环数组值,java,android,Java,Android,我正在开发一个词汇表应用程序,我想用“下一步”和“上一步”按钮循环数组值。我从数据库和工作中分配了值。但是我不能在数组值之间循环。增加工作,但我必须单击几次以循环上一个值。我找不到正确的递增、递减运算符 int position = 0; `btnNext.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(

我正在开发一个词汇表应用程序,我想用“下一步”和“上一步”按钮循环数组值。我从数据库和工作中分配了值。但是我不能在数组值之间循环。增加工作,但我必须单击几次以循环上一个值。我找不到正确的递增、递减运算符

 int position = 0; 
`btnNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(position >= array.length){
                position = 0;
                txtWord.setText(array[position][0]);
                position++;                    
            }else {
                txtWord.setText(array[position][0]);
                position++;                   
            }
        }
    });`

btnBack.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(position >= 0){
                txtWord.setText(array[position--][0]);
            }else{
                position = array.length;
                txtWord.setText(array[position--][0]);
            }

        }
    });
完整代码如下:

DatabaseHelper myDB;
TextView txtWord, txtNumberOfWords;
Button btnBack, btnShow, btnNext;
String[][] array;
int position = 0;
boolean showWord= true;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(myToolbar);

    txtWord = (TextView)findViewById(R.id.txtWord);
    txtNumberOfWords = (TextView)findViewById(R.id.txtNumberOfWords);
    btnBack = (Button)findViewById(R.id.btnBack);
    btnShow = (Button)findViewById(R.id.btnShow);
    btnNext = (Button)findViewById(R.id.btnNext);

    myDB = new DatabaseHelper(this);


    Cursor data = myDB.getListContents();
    array = new String[data.getCount()][2];

    if(data.getCount() == 0){
        Toast.makeText(MainActivity.this, "There is no definition!", Toast.LENGTH_LONG).show();
    }else{

        data.moveToFirst();

        for(int i = 0; i < data.getCount(); i++){
                for(int y = 0; y < 2; y++){
                    array[i][y] = data.getString(1+y);
                }
                data.moveToNext();
            }
        txtWord.setText(array[0][0]);
        position = position + 1;
        txtNumberOfWords.setText(position  + " of " + array.length);
    }

    btnNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(position >= array.length){
                position = 0;
                txtWord.setText(array[position][0]);
                position++;
                txtNumberOfWords.setText(position  + " of " + array.length);
            }else {
                txtWord.setText(array[position][0]);
                position++;
                txtNumberOfWords.setText(position  + " of " + array.length);
            }
            showWord = true;
        }
    });

    btnBack.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(position >= 0){
                txtWord.setText(array[position--][0]);
                txtNumberOfWords.setText(position  + " of " + array.length);
            }else{
                position = array.length;
                txtWord.setText(array[position--][0]);
                txtNumberOfWords.setText(position  + " of " + array.length);
            }

        }
    });

    btnShow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(showWord){
                txtWord.setText(array[position-1][1]);
                showWord = false;
            }else{
                txtWord.setText(array[position-1][0]);
                showWord = true;
            }
        }
    });
}
DatabaseHelper-myDB;
text查看txtWord,txtNumberOfWords;
按钮btnBack、btnShow、btnNext;
字符串[][]数组;
int位置=0;
布尔showWord=true;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar myToolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(myToolbar);
txtWord=(TextView)findViewById(R.id.txtWord);
txtNumberOfWords=(TextView)findViewById(R.id.txtNumberOfWords);
btnBack=(按钮)findViewById(R.id.btnBack);
btnShow=(按钮)findViewById(R.id.btnShow);
btnNext=(按钮)findViewById(R.id.btnNext);
myDB=新数据库助手(此);
游标数据=myDB.getListContents();
数组=新字符串[data.getCount()][2];
if(data.getCount()==0){
Toast.makeText(MainActivity.this,“没有定义!”,Toast.LENGTH_LONG.show();
}否则{
data.moveToFirst();
对于(int i=0;i=array.length){
位置=0;
setText(数组[position][0]);
位置++;
txtNumberOfWords.setText(位置+数组长度中的“+”);
}否则{
setText(数组[position][0]);
位置++;
txtNumberOfWords.setText(位置+数组长度中的“+”);
}
showWord=true;
}
});
btnBack.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(位置>=0){
setText(数组[位置--][0]);
txtNumberOfWords.setText(位置+数组长度中的“+”);
}否则{
位置=数组长度;
setText(数组[位置--][0]);
txtNumberOfWords.setText(位置+数组长度中的“+”);
}
}
});
btnShow.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(showWord){
setText(数组[position-1][1]);
showWord=false;
}否则{
setText(数组[position-1][0]);
showWord=true;
}
}
});
}
试试这个

    btnNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            position = (position + 1) % array.length;
            txtWord.setText(array[position][0]);
        }
    });

    btnBack.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            position = (position - 1) % array.length;
            txtWord.setText(array[position][0]);
        }
    });
还有一个bug,因为您将
position
用作TextView-
txtNumberOfWords
和数组指针。这些是不同的。对于文本视图,显示
position+1
,对于数组,使用
position
。别忘了从以下位置更改代码行:

position = position + 1;
为此:

position = 0;
试试这个

    btnNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            position = (position + 1) % array.length;
            txtWord.setText(array[position][0]);
        }
    });

    btnBack.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            position = (position - 1) % array.length;
            txtWord.setText(array[position][0]);
        }
    });
还有一个bug,因为您将
position
用作TextView-
txtNumberOfWords
和数组指针。这些是不同的。对于文本视图,显示
position+1
,对于数组,使用
position
。别忘了从以下位置更改代码行:

position = position + 1;
为此:

position = 0;

它工作不稳定。例如,值从第一个跳转到第三个。尝试将位置设置为0,而不是位置+1;我写的上述代码在前进方向上运行良好。是的,它从第一位跳到第三位,因为您的位置设置错误。在单击侦听器之前将其设置为0。对于文本视图(txtNumberOfWords),显示位置+1Ohh最后,是的,递增和递减正在工作。但当我试图从数组[0][0]值返回时,应用程序崩溃了。前进方向没有问题。它循环正确。我应该使用if语句吗?例如,如果(位置)不稳定。例如,值从第一个跳到第三个。尝试将位置设置为0,而不是位置+1;我编写的上述代码在前进方向上运行良好。是的,它从第一个跳到第三个,因为您的位置设置错误。在clickListeners之前将其设置为0。对于文本视图(txtNumberOfWords),显示位置+1Ohh最后,是的,递增和递减现在工作。但是当我试图从数组[0][0]值返回时,应用程序崩溃。前进方向没有问题。它正确循环。我应该使用if语句吗?例如if(位置