このアプリケーションでは抵抗(複合画像)を表示していますが、その下に4つの数値ピッカーがあります。変更され、私は数字ピッカーと画像ビューの表示されたすべての値を保持すると期待するので、ユーザーインターフェイスは再作成されません...何が私の保存メソッドで間違っていますか?私はミスが私の節約であると信じて、ここで アプリケーションはオリエンテーション変更時にオブジェクトの状態を保持しません
は私のメインActivityクラスマイナンバーピッカーと私のイメージビューpublic class MainActivity extends Activity {
RelativeLayout rl;
TextView resistorValue;
MyImageView bandOne, bandTwo, bandThree, tolerance;
int figureOne;
int figureTwo;
int multiplier;
String toleranceRate;
String resistanceDisplayed;
MyNumberPicker pickerOne;
MyNumberPicker pickerTwo;
MyNumberPicker pickerThree;
MyNumberPicker pickerTolerance;
SharedPreferences prefs;
SharedPreferences.Editor editor;
String colorSelected;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//gets shared preferences
prefs = getSharedPreferences("myPrefs", MODE_PRIVATE);
editor = prefs.edit();
//initialize the user interface objects
rl = (RelativeLayout)findViewById(R.id.main_layout);
bandOne = (MyImageView)findViewById(R.id.colorOne);
bandTwo = (MyImageView)findViewById(R.id.colorTwo);
bandThree = (MyImageView)findViewById(R.id.colorThree);
tolerance = (MyImageView)findViewById(R.id.Tolerance);
resistorValue = (TextView)findViewById(R.id.resValue);
pickerOne = (MyNumberPicker)findViewById(R.id.bandOne);
pickerTwo = (MyNumberPicker)findViewById(R.id.bandTwo);
pickerThree = (MyNumberPicker)findViewById(R.id.bandThree);
pickerTolerance = (MyNumberPicker)findViewById(R.id.bandTolerance);
//checks for shared preferences
colorSelected = prefs.getString("background_color", "WHITE");
if(colorSelected.equals("RED")){
rl.setBackgroundColor(Color.RED);
}else if(colorSelected.equals("GREEN")){
rl.setBackgroundColor(Color.GREEN);
}else if(colorSelected.equals("BLUE")){
rl.setBackgroundColor(Color.BLUE);
}else if(colorSelected.equals("BLACK")){
rl.setBackgroundColor(Color.BLACK);
}else{
rl.setBackgroundColor(Color.WHITE);
}
if(savedInstanceState != null){
bandOne = (MyImageView)savedInstanceState.getSerializable("bandOne");
bandTwo = (MyImageView)savedInstanceState.getSerializable("bandTwo");
bandThree = (MyImageView)savedInstanceState.getSerializable("bandThree");
tolerance = (MyImageView)savedInstanceState.getSerializable("tolerance");
pickerOne = (MyNumberPicker)savedInstanceState.getSerializable("pickerOne");
pickerTwo = (MyNumberPicker)savedInstanceState.getSerializable("pickerTwo");
pickerThree = (MyNumberPicker)savedInstanceState.getSerializable("pickerThree");
}
pickerOne.setMinValue(0);
pickerOne.setMaxValue(9);
pickerTwo.setMinValue(0);
pickerTwo.setMaxValue(9);
pickerThree.setMinValue(0);
pickerThree.setMaxValue(9);
pickerTolerance.setMinValue(0);
pickerTolerance.setMaxValue(3);
//sets the displayed values of the number pickers
pickerOne.setDisplayedValues(new String[] { "Black", "Brown", "Red",
"Orange", "Yellow", "Green", "Blue", "Violet", "Grey",
"White" });
pickerTwo.setDisplayedValues(new String[] { "Black", "Brown", "Red",
"Orange", "Yellow", "Green", "Blue", "Violet", "Grey",
"White" });
pickerThree.setDisplayedValues(new String[] { "Black", "Brown", "Red",
"Orange", "Yellow", "Green", "Blue", "Violet", "Grey",
"White" });
pickerTolerance.setDisplayedValues(new String[] { "Brown", "Red", "Gold", "Silver"});
//triggered when numberPickers value are changed
pickerOne.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
switch (newVal) {
case 0:
bandOne.setImageResource(R.drawable.black);
bandOne.setTag(Integer.valueOf(R.drawable.black));
figureOne = 0;
break;
case 1:
bandOne.setImageResource(R.drawable.brown);
bandOne.setTag(Integer.valueOf(R.drawable.brown));
figureOne = 1;
break;
case 2:
bandOne.setImageResource(R.drawable.red);
figureOne = 2;
break;
case 3:
bandOne.setImageResource(R.drawable.orange);
figureOne = 3;
break;
case 4:
bandOne.setImageResource(R.drawable.yellow);
figureOne = 4;
break;
case 5:
bandOne.setImageResource(R.drawable.green);
figureOne = 5;
break;
case 6:
bandOne.setImageResource(R.drawable.blue);
figureOne = 6;
break;
case 7:
bandOne.setImageResource(R.drawable.violet);
figureOne = 7;
break;
case 8:
bandOne.setImageResource(R.drawable.grey);
figureOne = 8;
break;
case 9:
bandOne.setImageResource(R.drawable.white);
figureOne = 9;
break;
}
calculateResistorValue();
}
});
pickerTwo.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
switch (newVal) {
case 0:
bandTwo.setImageResource(R.drawable.black);
figureTwo = 0;
break;
case 1:
bandTwo.setImageResource(R.drawable.brown);
figureTwo = 1;
break;
case 2:
bandTwo.setImageResource(R.drawable.red);
figureTwo = 2;
break;
case 3:
bandTwo.setImageResource(R.drawable.orange);
figureTwo = 3;
break;
case 4:
bandTwo.setImageResource(R.drawable.yellow);
figureTwo = 4;
break;
case 5:
bandTwo.setImageResource(R.drawable.green);
figureTwo = 5;
break;
case 6:
bandTwo.setImageResource(R.drawable.blue);
figureTwo = 6;
break;
case 7:
bandTwo.setImageResource(R.drawable.violet);
figureTwo = 7;
break;
case 8:
bandTwo.setImageResource(R.drawable.grey);
figureTwo = 8;
break;
case 9:
bandTwo.setImageResource(R.drawable.white);
figureTwo = 9;
break;
}
calculateResistorValue();
}
});
pickerThree.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
switch (newVal) {
case 0:
bandThree.setImageResource(R.drawable.black);
multiplier = 0;
break;
case 1:
bandThree.setImageResource(R.drawable.brown);
multiplier = 1;
break;
case 2:
bandThree.setImageResource(R.drawable.red);
multiplier = 2;
break;
case 3:
bandThree.setImageResource(R.drawable.orange);
multiplier = 3;
break;
case 4:
bandThree.setImageResource(R.drawable.yellow);
multiplier = 4;
break;
case 5:
bandThree.setImageResource(R.drawable.green);
multiplier = 5;
break;
case 6:
bandThree.setImageResource(R.drawable.blue);
multiplier = 6;
break;
case 7:
bandThree.setImageResource(R.drawable.violet);
multiplier = 7;
break;
case 8:
bandThree.setImageResource(R.drawable.grey);
multiplier = 8;
break;
case 9:
bandThree.setImageResource(R.drawable.white);
multiplier = 9;
break;
}
calculateResistorValue();
}
});
pickerTolerance.setOnValueChangedListener(new NumberPicker.OnValueChangeListener(){
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal){
switch(newVal){
case 0:
tolerance.setImageResource(R.drawable.brown);
toleranceRate = "1%";
break;
case 1:
tolerance.setImageResource(R.drawable.red);
toleranceRate = "2%";
break;
case 2:
tolerance.setImageResource(R.drawable.gold);
toleranceRate = "5%";
break;
case 3:
tolerance.setImageResource(R.drawable.silver);
toleranceRate = "10%";
break;
}
calculateResistorValue();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.preferences_background_color) {
CharSequence colors[] = new CharSequence[] {"red","green", "blue", "black"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setItems(colors, new DialogInterface.OnClickListener() {
//opens a dialog that let the user choose the background color and saves it to shared preferences
@Override
public void onClick(DialogInterface dialog, int which) {
switch(which){
case 0:
rl.setBackgroundColor(Color.RED);
colorSelected="RED";
editor.putString("background_color", colorSelected);
editor.commit();
break;
case 1:
rl.setBackgroundColor(Color.GREEN);
colorSelected="GREEN";
editor.putString("background_color", colorSelected);
editor.commit();
break;
case 2:
rl.setBackgroundColor(Color.BLUE);
colorSelected="BLUE";
editor.putString("background_color", colorSelected);
editor.commit();
break;
case 3:
rl.setBackgroundColor(Color.BLACK);
colorSelected="BLACK";
editor.putString("background_color", colorSelected);
editor.commit();
break;
default:
rl.setBackgroundColor(Color.WHITE);
break;
}
}
});
builder.show();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putSerializable("bandOne", bandOne);
outState.putSerializable("bandTwo", bandTwo);
outState.putSerializable("bandThree", bandThree);
outState.putSerializable("tolerance", tolerance);
outState.putSerializable("pickerOne", pickerOne);
outState.putSerializable("pickerTwo", pickerTwo);
outState.putSerializable("pickerThree", pickerThree);
super.onSaveInstanceState(outState);
}
//calculates the resistor value and sets text of textView
public void calculateResistorValue(){
double resValue = ((10 * figureOne) + figureTwo) * Math.pow(10, multiplier)/1000;
String resMessage = null;
if(resValue >= (10^6)){
resValue /= (10^6);
resMessage= Integer.toString((int) resValue) + " M Ohms";
}else if(resValue >= (10^3)){
resValue /= (10^3);
resMessage = Integer.toString((int) resValue) + " k Ohms";
}else{
resMessage = Integer.toString((int) resValue) + " Ohms";
}
resistorValue.setText(resMessage + " " + toleranceRate);
}
}
また、私が持っているカスタムクラスである(と彼らが正しく動作)だけでなく、XMLファイルでメソッドまたはOn Createメソッドでオブジェクトが逆シリアル化されています。
![抵抗絵] http://www.electronics123.com/page/calculate-resistor-values
:このような値を復元するためのコード。あなたは実際に何を保存しようとしていますか? – ianhanniballake
私は、ユーザーインターフェイスの外観を保存しようとしています、イメージビューのイメージリソースは、onChangeValueListenerのスイッチケースに応じて選択されています...どのように私はこれらの選択された値を保存することができますオリエンテーションの変更 –
NumberPickerやImageViewオブジェクトのようなすべてのビューの状態を保存する –