0

共有設定の問題に直面しています..

私のアプリケーションでは、クイズの答えを保存するために共有設定を使用しています..

私が試してみました。私が周到な質問に来たとき、それはうまく動作します..しかし、私の問題は..

1 番目の質問でユーザーが回答を選択して 2 番目の質問に進むと、ここでもユーザーは回答を選択し、賢明なプロセスのように 3 番目の質問に進みます。正しく、ユーザーがこの時間までに次に進むと、答えが正しくチェックされません...私は何を間違えましたか?

私を指摘してください..そしてそれを得る方法を教えてください。事前にどうもありがとう..

私の悪い英語でごめんなさい..

これが私のコードです..

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);
        }
    };

}
4

2 に答える 2

0

SavePreferences メソッドで「quest」変数の値を監視するためのデバッグを試みましたか? String から int へ、および int から String への不要なキャストが 2 つあります。「キー」変数の値によっては、これが問題になる可能性があります。

キャストせずに「キー」変数をエディターのキーとして直接使用するようにしてください。

関数の残りの部分は正しいようです。

編集 私が言っているのは、おそらくこのキャストに問題があるということですが、よくわかりません。

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();
}
于 2013-08-21T07:48:20.143 に答える