我正在构建一个应用程序,该应用程序需要一个后退和下一步按钮来显示从数据库中检索到的记录。 我已经将记录加载到 arrayList 中,现在我面临着如何在单击按钮时使我的记录来回切换的困境,即如何操作列表中的记录。请帮忙。
List<Question> questionList = new ArrayList<Question>();
Cursor cursor = myDataBase.rawQuery(selectQuery, null);
if(cursor != null && cursor.getCount()>0){
if(cursor.moveToFirst()){
//do a loop to get all the questions
do{
Question quest = new Question();// create a new Question object
quest.setID(cursor.getInt(0));//get the question id for the cursor and set it to the object
quest.setQUESTION(cursor.getString(1));//same here for the question and the answers
quest.setCorrectAnswer(cursor.getString(2));
questionList.add(quest);//finally add the question to the list
}while(cursor.moveToNext());//move to next question until you finish with all of them
}
}
else {
Toast.makeText(myContext, "No records yet!", Toast.LENGTH_SHORT).show();
}
这就是我将记录加载到 arrayList 中的方式,从我的活动中,我执行了一个 loadPrevious 和 loadNext 方法在按钮单击时来回切换,我已经完成了 loadNext 部分并且它有效,我只是不知道如何实现 loadPrevious 按钮。
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//currentQ.setChoice(num);
loadNextQuestion();
}
});
protected void loadNextQuestion() {
// TODO Auto-generated method stub
Log.e(TAG,"load next question original");
if (questions.size() > 2)
{
currentQ = questions.remove(0);
}
question.setText(currentQ.getQUESTION());
correctAnswer = currentQ.getCorrectAnswer();
answer.setText(correctAnswer);
}
问题列表如下所示
package com.threeleafsoln.questionanswer;
public class Question {
private int ID;
private String QUESTION;
private String ANSWER;
public Question()
{
ID=0;
QUESTION="";
ANSWER="";
}
public Question(String qUESTION, String cORRECT_ANSWER) {
QUESTION = qUESTION;
ANSWER = cORRECT_ANSWER;
}
public int getID()
{
return ID;
}
public String getQUESTION() {
return QUESTION;
}
public String getCorrectAnswer() {
return ANSWER;
}
public void setID(int id)
{
ID=id;
}
public void setQUESTION(String qUESTION) {
QUESTION = qUESTION;
}
public void setCorrectAnswer(String aNSWER) {
ANSWER = aNSWER;
}
}
您只需要根据当前显示的记录来维护计数器。
首先,当您显示数组列表中的第一个问题时,将该计数器初始化为问题编号。(假设它的第一个问题 = 数组列表的第 0 个元素)
所以,它将是:
qCounter = 0;
现在,在下一个的点击中将计数器增加 1,在上一个的点击中将计数器减少 1。
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(qCounter < questions.size()){ //i.e. its not last question of list
loadNextQuestion();
qCounter++;
}
}
});
prev.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(qCounter > 0){ //i.e. its not first question of list
loadPreviousQuestion();
qCounter--;
}
}
});
protected void loadNextQuestion() {
//show item with index = (qCounter + 1)
currentQ = questions.get(qCounter + 1);
question.setText(currentQ.getQUESTION());
correctAnswer = currentQ.getCorrectAnswer();
answer.setText(correctAnswer);
}
protected void loadPreviousQuestion() {
//show item with index = (qCounter - 1)
currentQ = questions.get(qCounter + -1);
question.setText(currentQ.getQUESTION());
correctAnswer = currentQ.getCorrectAnswer();
answer.setText(correctAnswer);
}
希望这有帮助。
的迭代器,允许程序员在任一方向上遍历列表。您无需从 ArrayList 中删除问题,只需使用索引来引用它们。
有关示例,请参阅此链接
ListIterator<Question> itr=questionList.listIterator();
protected void loadNextQuestion() {
if (itr.hasNext){
currentQ = itr.next();
question.setText(currentQ.getQUESTION());
correctAnswer = currentQ.getCorrectAnswer();
answer.setText(correctAnswer);
}
}
protected void loadPreviousQuestion() {
if (itr.hasPrevious){
currentQ = itr.previous();
question.setText(currentQ.getQUESTION());
correctAnswer = currentQ.getCorrectAnswer();
answer.setText(correctAnswer);
}
}