2013-08-21 2 views
0

Я столкнулся с проблемой с общими предпочтениями ..как использовать общие предпочтения в викторине

В моем приложении им, используя общие предпочтения для сохранения викторины ответы ..

Я попробовал. Его работы прекрасны, когда я пришел к опасному вопросу .. Но моя проблема заключается в том, что ...

Когда 1-й вопрос приходит, пользователь выбирает ответ и идет на второй вопрос, здесь также пользователь выберет ответ и отправится на третий вопрос, как мудрый процесс ходы. Когда пользователь возвращается на опасный вопрос (2-й вопрос), здесь пользователи правильно проверяют кнопку, и когда пользователь идет к следующему к этому времени, ответ не проверяет правильно ... что я ошибался?

Просьба указать мне .. и дать решение, как это получить? Большое спасибо заранее ..

Извините за мой плохой английский ..

Вот мой код ..

public class MainActivity extends Activity { 
    RadioGroup btn_practicerg; 
    RadioButton btn_practice1; 
    RadioButton btn_practice2; 
    RadioButton btn_practice3; 
    RadioButton btn_practice4; 
    RadioGroup radioButton; 
    TextView quetxt; 
    Button next; 
    Button previous; 
    int i = 0, k = 0; 
    int checkedIndex; 
    int num = 1; 
    private ArrayList<String> answ1 = new ArrayList<String>(); 
    private ArrayList<String> ques1 = new ArrayList<String>(); 
    final String KEY_SAVED_RADIO_BUTTON_INDEX = "SAVED_RADIO_BUTTON_INDEX"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     btn_practicerg = (RadioGroup) findViewById(R.id.rdgroup); 
     btn_practice1 = (RadioButton) findViewById(R.id.RB1); 
     btn_practice2 = (RadioButton) findViewById(R.id.RB2); 
     btn_practice3 = (RadioButton) findViewById(R.id.RB3); 
     btn_practice4 = (RadioButton) findViewById(R.id.RB4); 
     quetxt = (TextView) findViewById(R.id.que_txt); 
     next = (Button) findViewById(R.id.nxt_btn); 
     previous = (Button) findViewById(R.id.accbtn); 

     runOnUiThread(new Runnable() { 
      public void run() { 
       LoadQuestions(); 
      } 
     }); 

     next.setOnClickListener(new Button.OnClickListener() { 
      public void onClick(View v) { 

       int selectedId = btn_practicerg.getCheckedRadioButtonId(); 

       // find the radiobutton by returned id 
       RadioButton radioSexButton = (RadioButton) findViewById(selectedId); 
       checkedIndex = btn_practicerg.indexOfChild(radioSexButton); 
       Toast.makeText(MainActivity.this, radioSexButton.getText(), 
         Toast.LENGTH_SHORT).show(); 

       if (i == ques1.size() - 1) { 
        showAlert(); 
       } else { 

        ++i; 
        ++num; 
        TextView quetxt = (TextView) findViewById(R.id.que_txt); 
        quetxt.setText("Q" + num + ")" + ques1.get(i)); 

        ++k; 
        btn_practice1.setText(answ1.get((k * 4) + 0)); 
        btn_practice2.setText(answ1.get((k * 4) + 1)); 
        btn_practice3.setText(answ1.get((k * 4) + 2)); 
        btn_practice4.setText(answ1.get((k * 4) + 3)); 
        btn_practicerg.clearCheck(); 

        SavePreferences(String.valueOf(num), checkedIndex); 

       } 
      } 

      private void showAlert() { 
       // TODO Auto-generated method stub 

      } 

     }); 

     Button previousbtn1 = (Button) findViewById(R.id.accbtn); 
     previousbtn1.setOnClickListener(new Button.OnClickListener() { 
      public void onClick(View v) { 
       --i; 
       --num; 
       TextView quetxt = (TextView) findViewById(R.id.que_txt); 
       quetxt.setText("Q" + num + ")" + ques1.get(i)); 

       --k; 
       btn_practice1.setText(answ1.get((k * 4) + 0)); 
       btn_practice2.setText(answ1.get((k * 4) + 1)); 
       btn_practice3.setText(answ1.get((k * 4) + 2)); 
       btn_practice4.setText(answ1.get((k * 4) + 3)); 

       LoadPreferences(); 
      } 
     }); 

    } 

    private void LoadQuestions() { 
     ques1.add("whats the name?"); 
     ques1.add("whats place?"); 
     ques1.add("whats the favourite?"); 
     ques1.add("whats the game?"); 
     ques1.add("whats the time?"); 

     answ1.add("A"); 
     answ1.add("B"); 
     answ1.add("C"); 
     answ1.add("D"); 
     answ1.add("MDU"); 
     answ1.add("MS"); 
     answ1.add("CHE"); 
     answ1.add("POND"); 
     answ1.add("1"); 
     answ1.add("2"); 
     answ1.add("3"); 
     answ1.add("4"); 
     answ1.add("VB"); 
     answ1.add("TENN"); 
     answ1.add("HOC"); 
     answ1.add("CRI"); 
     answ1.add("11"); 
     answ1.add("12"); 
     answ1.add("13"); 
     answ1.add("14"); 

     quetxt = (TextView) findViewById(R.id.que_txt); 
     quetxt.setText("Q" + num + ")" + ques1.get(i)); 

     btn_practice1.setText(answ1.get(0)); 
     btn_practice2.setText(answ1.get(1)); 
     btn_practice3.setText(answ1.get(2)); 
     btn_practice4.setText(answ1.get(3)); 
    } 

    private void SavePreferences(String key, int value) { 
     int quest = (Integer.parseInt(key)) - 1; 
     SharedPreferences preferences = getSharedPreferences("MY_SHARED_PREF", 
       0); 
     SharedPreferences.Editor editor = preferences.edit(); 

     editor.putInt(String.valueOf(quest), value); 
     editor.commit(); 
    } 

    private void LoadPreferences() { 

     SharedPreferences getProgramPrefs = this.getSharedPreferences(
       "MY_SHARED_PREF", MODE_WORLD_READABLE); 

     int savedRadioIndex = getProgramPrefs.getInt(String.valueOf(num), -1); 

     System.out.println("SavedRadioIndex" + savedRadioIndex); 
     RadioButton savedCheckedRadioButton = (RadioButton) btn_practicerg 
       .getChildAt(savedRadioIndex); 
     savedCheckedRadioButton.setChecked(true); 
    } 

    OnCheckedChangeListener radioGroupOnCheckedChangeListener = new OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 
      RadioButton radioButton = (RadioButton) group 
        .findViewById(checkedId); 
      checkedIndex = group.indexOfChild(radioButton); 
      System.out.println("checkedIndex" + checkedIndex); 
     } 
    }; 

} 

ответ

0

Это не хорошо, чтобы сохранить эти данные в настройках. Лучше сохранить эти данные в базе данных, если вы хотите получить данные, когда приложение будет завершено, а затем снова запустите. Но в ситуации, как это вы можете хранить данные в какой-либо объект в деятельности, как это:

public class Question { 
private int id; 
private String question; 
private List<Answer> possibleAnswers; 
private int correctAnswerId; 
private String userAnswer; 
} 
0

Вы пробовали отладки для просмотра значений переменных «Квест» по методу SavePreferences? Есть два ненужных отбрасывания от String до int и от int до String, возможно, это может быть проблемой в зависимости от значений «ключевой» переменной.

Вы должны попытаться использовать переменную «ключ» непосредственно в качестве ключа для редактора без кастинга.

Остальная часть функции кажется правильной.

EDIT Я говорю о том, что, возможно, в этом акте есть проблема, но я не уверен.

private void SavePreferences(String key, int value) { 
    SharedPreferences preferences = getSharedPreferences("MY_SHARED_PREF",0); 
    SharedPreferences.Editor editor = preferences.edit(); 

    editor.putInt(key, value); 
    editor.commit(); 
} 
+0

я не могу understand..can редактирования кода и объяснить .. –

+0

Его не working..How проверить состояние для sharedpref ... –