Android 如何使用SharedReference保存单选按钮状态?
这是应用程序视图:Android 如何使用SharedReference保存单选按钮状态?,android,radio-button,sharedpreferences,android-sharedpreferences,android-radiobutton,Android,Radio Button,Sharedpreferences,Android Sharedpreferences,Android Radiobutton,这是应用程序视图: 这是我的活动代码: public class Quiz extends AppCompatActivity { public static int point; public static int i = 0; RadioGroup radioGroup; public static int totalPoint =0; int arrValues[]={0,0,0,0}; int iPosition=0; @Over
这是我的活动代码:
public class Quiz extends AppCompatActivity {
public static int point;
public static int i = 0;
RadioGroup radioGroup;
public static int totalPoint =0;
int arrValues[]={0,0,0,0};
int iPosition=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quiz);
i = 0;
final RadioButton radioButton1 =(RadioButton) findViewById(R.id.number_1);
final RadioButton radioButton2 =(RadioButton) findViewById(R.id.number_2);
final RadioButton radioButton3 =(RadioButton) findViewById(R.id.number_3);
final RadioButton radioButton4 =(RadioButton) findViewById(R.id.number_4);
final String[] items = getResources().getStringArray(R.array.quiz);
radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
Button nextButton = (Button) findViewById(R.id.button);
Button previousButton = (Button) findViewById(R.id.button2);
radioButton1.setText(items[0]);
radioButton2.setText(items[1]);
radioButton3.setText(items[2]);
radioButton4.setText(items[3]);
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) throws ArrayIndexOutOfBoundsException {
try {
if (checkedId == R.id.number_1) {
arrValues[iPosition] = 0;
} else if (checkedId == R.id.number_2) {
arrValues[iPosition] = 1;
}else if (checkedId == R.id.number_3) {
arrValues[iPosition]= 2;
}else if (checkedId == R.id.number_4) {
arrValues[iPosition] = 3;
}
// Total
totalPoint = getTotalPoint();
Log.e("sd",""+totalPoint);
}
catch (ArrayIndexOutOfBoundsException sd){
Log.e("sd","sdsd");
}
}
private int getTotalPoint() {
int sum = 0;
for (int i = 0; i < arrValues.length; i++)
sum += arrValues[i];
Log.e("sum",""+sum);
return sum;
}
});
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loadNextQuestion();
}
private void loadNextQuestion() throws ArrayIndexOutOfBoundsException {
// Update UI
// Clear radio button state
try {
if (i>= items.length-4){
return;
}
iPosition++;
i = i + 4;
radioGroup.clearCheck();
radioButton1.setText(items[i]);
radioButton2.setText(items[i + 1]);
radioButton3.setText(items[i + 2]);
radioButton4.setText(items[i + 3]);
} catch (ArrayIndexOutOfBoundsException arr) {
}
}
});
previousButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Update UI
// Clear radio button state
loadpreQuestion();
}
private void loadpreQuestion() {
try {
if (i<=0){
return;
}
iPosition--;
i = i - 4;
radioGroup.clearCheck();
radioButton1.setText(items[i]);
radioButton2.setText(items[i + 1]);
radioButton3.setText(items[i + 2]);
radioButton4.setText(items[i + 3]);
} catch (ArrayIndexOutOfBoundsException arr) {
}
}
});
}
public void onRadioButtonClicked(View view)throws ArrayIndexOutOfBoundsException {
// Is the button now checked?
boolean checked = ((RadioButton) view).isChecked();
// Check which radio button was clicked
try {
switch(view.getId()) {
case R.id.number_1:
if (checked)
point = 0;
Toast.makeText(this, ""+ arrValues[iPosition] ,
Toast.LENGTH_SHORT).show();
// Pirates are the best
break;
case R.id.number_2:
if (checked)
point = 1;
Toast.makeText(this, ""+ arrValues[iPosition] ,
Toast.LENGTH_SHORT).show();
// Ninjas rule
break;
case R.id.number_3:
if (checked)
point = 2;
Toast.makeText(this, ""+arrValues[iPosition] ,
Toast.LENGTH_SHORT).show();
// Ninjas rule
break;
case R.id.number_4:
if (checked)
point = 3;
Toast.makeText(this, ""+ arrValues[iPosition] ,
Toast.LENGTH_SHORT).show();
// Ninjas rule
break; }
}
catch (ArrayIndexOutOfBoundsException ds){}
}
@Override
public void onBackPressed() {
super.onBackPressed();
i = 0;
}
}
使用键
i位置将您的RadioButton
状态存储到SharedPreferences
中,i位置
为0,1,2,3……(N-1)
(其中N=问题数量
)
在SharedReferences
中存储单选按钮的状态:
public class Quiz extends AppCompatActivity {
public static int point;
public static int i = 0;
RadioGroup radioGroup;
public static int totalPoint = 0;
int arrValues[] = {0,0,0,0};
int iPosition = 0;
SharedPreferences sharedPreferences;
SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
.......
.............
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
editor = sharedPreferences.edit();
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) throws ArrayIndexOutOfBoundsException {
try {
if (checkedId == R.id.number_1) {
arrValues[iPosition] = 0;
editor.putInt(String.valueOf(iPosition), 0);
} else if (checkedId == R.id.number_2) {
arrValues[iPosition] = 1;
editor.putInt(String.valueOf(iPosition), 1);
}else if (checkedId == R.id.number_3) {
arrValues[iPosition]= 2;
editor.putInt(String.valueOf(iPosition), 2);
}else if (checkedId == R.id.number_4) {
arrValues[iPosition] = 3;
editor.putInt(String.valueOf(iPosition), 3);
}
// Commit changes
editor.commit();
// Total
totalPoint = getTotalPoint();
Log.e("sd",""+totalPoint);
}
catch (ArrayIndexOutOfBoundsException sd){
Log.e("sd","sdsd");
}
}
});
}
............
...............
}
从SharedReferences
获取单选按钮的状态:
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) throws ArrayIndexOutOfBoundsException {
try {
if (checkedId == R.id.number_1) {
arrValues[iPosition] = 0;
editor.putInt(String.valueOf(iPosition), 0);
} else if (checkedId == R.id.number_2) {
arrValues[iPosition] = 1;
editor.putInt(String.valueOf(iPosition), 1);
sharedPreferences.getInt(String.valueOf(iPosition),1);
int radioButtonStatusQ1 = sharedPreferences.getInt("0", 0);
if (radioButtonStatusQ1==1){
radioGroup.check(R.id.number_2);
}
}else if (checkedId == R.id.number_3) {
arrValues[iPosition]= 2;
editor.putInt(String.valueOf(iPosition), 2);
}else if (checkedId == R.id.number_4) {
arrValues[iPosition] = 3;
editor.putInt(String.valueOf(iPosition), 3);
}
// Commit
editor.commit();
// Total
totalPoint = getTotalPoint();
Log.e("sd",""+totalPoint);
}
catch (ArrayIndexOutOfBoundsException sd){
Log.e("sd","sdsd");
}
}
int radioButtonStatusQ1 = sharedPreferences.getInt("0", 0);
int radioButtonStatusQ2 = sharedPreferences.getInt("1", 0);
........
..................
我想保存单选按钮的checked
状态,而不是它的值。仍然是保存状态。例如:您的问题1
>如果单击R.id.number_2
>>它将存储为editor.putin(String.valueOf(iPosition),1)代码>这里1表示您的单选按钮R.id.number_2
已选中。我想使用类似于:if(radioButtonStatusQ1==1){radioGroup.check(R.id.number_2);}
但它不工作,所以当前状态如何?它有以下错误:java.lang.ClassCastException:java.lang.Boolean无法转换为java.lang.Integer