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(位置