我是Android的初学者,我正在创建一个与SpellBee相关的应用程序。问题是我在屏幕上有2个按钮,一个用于下一个字,一个用于前一个字。在a default first word shows on screen开始。在第一次按下一个单词后,它将显示数据库列表中的下一个单词。但是当我按下前一个按钮时,在第一次单击时它什么都不做,在第二次单击时它显示前一个单词,然后单击下一个单词按钮它什么都不做,在第二次单击时它移动到下一个单词。我怎样才能解决这个两次按钮问题This is my XML for Buttons
按钮代码
public void next_click(View view) {
if(iterator <= wordList.size()) {
word.setText(wordList.get(iterator));
definition.setText(definitionList.get(iterator));
usage.setText(usageList.get(iterator));
iterator++;
/*if (iterator == wordList.size()) {
Toast.makeText(Level1Activity.this, "Level 1 Completed",
Toast.LENGTH_SHORT).show();
next_word.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(Level1Activity.this,
SelectLevelActivity.class);
startActivity(i);
}
});
}*/
}
}
public void previous_click(View view) {
if(iterator != 0) {
--iterator;
word.setText(wordList.get(iterator));
definition.setText(definitionList.get(iterator));
usage.setText(usageList.get(iterator));
}
}
XML
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.msiprestige.spellbee.Level1Activity"
android:background="@drawable/bookshelf"
android:alpha="0.9">
<TextView
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/level_1"
android:textColor="#fff"
android:textSize="50sp"
android:visibility="visible"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/word"
android:layout_width="261dp"
android:layout_height="54dp"
android:layout_marginTop="23dp"
android:ems="10"
android:gravity="center_horizontal"
android:textColor="#fff"
android:textColorLink="#fff"
android:textSize="22sp"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView10" />
<TextView
android:id="@+id/textView12"
android:layout_width="80dp"
android:layout_height="24dp"
android:layout_marginStart="4dp"
android:text="@string/definition"
android:textColor="#fff"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.36" />
<TextView
android:id="@+id/textView13"
android:layout_width="54dp"
android:layout_height="24dp"
android:layout_marginStart="16dp"
android:layout_marginTop="109dp"
android:text="@string/usage"
android:textColor="#fff"
android:textSize="18sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView12" />
<TextView
android:id="@+id/definition"
android:layout_width="277dp"
android:layout_height="106dp"
android:layout_marginEnd="20dp"
android:layout_marginTop="48dp"
android:width="0dip"
android:ems="10"
android:textColor="#fff"
android:textSize="15sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/word" />
<TextView
android:id="@+id/usage"
android:layout_width="277dp"
android:layout_height="106dp"
android:layout_marginEnd="20dp"
android:layout_marginTop="27dp"
android:width="0dip"
android:ems="10"
android:textColor="#fff"
android:textSize="15sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/definition" />
<Button
android:id="@+id/previous_word"
android:layout_width="154dp"
android:layout_height="56dp"
android:layout_marginBottom="38dp"
android:layout_marginLeft="36dp"
android:onClick="previous_click"
android:text="Previous Word"
android:focusable="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent" />
<Button
android:id="@+id/next_word"
android:layout_width="154dp"
android:layout_height="56dp"
android:layout_marginBottom="36dp"
android:layout_marginRight="28dp"
android:onClick="next_click"
android:text="@string/next_word"
android:focusable="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent" />
</android.support.constraint.ConstraintLayout>
答案 0 :(得分:0)
我认为如果您将代码更改为此代码,您的问题将会得到解决! 要知道您的错误,您在将单词设置为textview后更改了迭代器变量。并且在if next_click 中,它应该小于 wordList.size() - 1 以避免 IndexOutOfBound 异常!
public void next_click(View view) {
if(iterator < wordList.size()-1) {
iterator++;
word.setText(wordList.get(iterator));
definition.setText(definitionList.get(iterator));
usage.setText(usageList.get(iterator));
startAnotherActivity(iterator);
}
}
public void previous_click(View view) {
if(iterator != 0) {
iterator--;
word.setText(wordList.get(iterator));
definition.setText(definitionList.get(iterator));
usage.setText(usageList.get(iterator));
startAnotherActivity(iterator);
}
}
private void startAnotherActivity(int your_extra_here) {
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("key_for_extra", your_extra_here);
startActivity(intent);
}
我觉得你需要将迭代器传递给另一个活动,因此我在这里为你提供了额外的帮助。如果你不需要它只是省略那部分!!!
答案 1 :(得分:0)
这是合乎逻辑的错误。当您的列表索引以0 开头时,当您显示第一个单词时,我猜迭代器索引已变为1 。现在,当您单击下一步时,在索引1显示单词并增加迭代器。现在迭代器是2 。
现在,点击上一个按钮。这里第一个迭代器递减,即迭代器为1 。并显示已在屏幕上显示的单词索引1 。所以你觉得它什么都不做,但它实际上执行你的逻辑。只是你的逻辑设置相同的单词。现在再次单击上一个按钮,迭代器将为0 ,并在索引0处显示单词。
下一个按钮的情况相同。现在,点击下一步按钮。你首先设置单词,即在索引0显示单词,它已经显示,并增加迭代器,它将变为1 。现在再次单击下一个按钮,它会在索引1显示单词,并将迭代器增加到2 。
确保您的计数器,即迭代器始终指向当前显示的当前单词索引。当单击next时,看到iterator + 1在单词列表的范围内,如果是,则递增它并在该索引处显示单词。类似地,在显示前一个单词时,检查index-1是否在单词列表的范围内,如果是,则递减它然后在该索引处显示单词。希望你明白。