EditTextsの状態を画面の向きで保存する方法に固執しています。現在、テキストがEditTextsに入力され、画面が方向付けられている場合、フィールドは(予想どおりに)ワイプされます。
私はすでにonSaveInstanceStateを呼び出して文字列を保存していますが、コードで作成されたEditTextを保存し、アクティビティを再描画するときにそれらを取得してEditTextに追加する方法がわかりません。
私のコードの抜粋:
私の主な活動は次のとおりです。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// get the multidim array
b = getIntent().getBundleExtra("obj");
m = (Methods) b.getSerializable("Methods");
// method to draw the layout
InitialiseUI();
// Restore UI state from the savedInstanceState.
if (savedInstanceState != null) {
String strValue = savedInstanceState.getString("light");
if (strValue != null) {
FLight = strValue;
}
}
try {
mCamera = Camera.open();
if (FLight.equals("true")) {
flashLight();
}
} catch (Exception e) {
Log.d(TAG, "Thrown exception onCreate() camera: " + e);
}
} // end onCreate
/** Called when the back button is pressed. */
@Override
public void onResume() {
super.onResume();
try {
mCamera = Camera.open();
if (FLight.equals("true")) {
flashLight();
}
} catch (Exception e) {
Log.d(TAG, "Thrown exception onCreate() camera: " + e);
}
} // end onCreate
/** saves data before leaving the screen */
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("light", FLight);
}
/** called when exiting / leaving the screen */
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause()");
if (mCamera != null) {
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
}
/*
* set up the UI elements - add click listeners to buttons used in
* onCreate() and onConfigurationChanged()
*
* Set the editTexts fields to show the previous readings as Hints
*/
public void InitialiseUI() {
Log.d(TAG, "Start of InitialiseUI, Main activity");
// get a reference to the TableLayout
final TableLayout myTLreads = (TableLayout) findViewById(R.id.myTLreads);
// Create arrays to hold the TVs and ETs
final TextView[] myTextViews = new TextView[m.getNoRows()]; // create an empty array;
final EditText[] myEditTexts = new EditText[m.getNoRows()]; // create an empty array;
for(int i =0; i<=m.getNoRows()-1;i++ ){
TableRow tr=new TableRow(this);
tr.setLayoutParams(new LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT));
// create a new textview / editText
final TextView rowTextView = new TextView(this);
final EditText rowEditText = new EditText(this);
// setWidth is needed otherwise my landscape layout is OFF
rowEditText.setWidth(400);
// this stops the keyboard taking up the whole screen in landscape layout
rowEditText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
// add some padding to the right of the TV
rowTextView.setPadding(0,0,10,0);
// set colors to white
rowTextView.setTextColor(Color.parseColor("#FFFFFF"));
rowEditText.setTextColor(Color.parseColor("#FFFFFF"));
// if readings already sent today set color to yellow
if(m.getTransmit(i+1)==false){
rowEditText.setEnabled(false);
rowEditText.setHintTextColor(Color.parseColor("#FFFF00"));
}
// set the text of the TV to the meter name
rowTextView.setText(m.getMeterName(i+1));
// set the hint of the ET to the last submitted reading
rowEditText.setHint(m.getLastReadString(i+1));
// add the textview to the linearlayout
rowEditText.setInputType(InputType.TYPE_CLASS_PHONE);//InputType.TYPE_NUMBER_FLAG_DECIMAL);
tr.addView(rowTextView);
tr.addView(rowEditText);
myTLreads.addView(tr);
// add a reference to the textView
myTextViews[i] = rowTextView;
myEditTexts[i] = rowEditText;
}
final Button submit = (Button) findViewById(R.id.submitReadings);
// add a click listener to the button
try {
submit.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.d(TAG, "Submit button clicked, Main activity");
preSubmitCheck(m.getAccNo(), m.getPostCode(), myEditTexts); // method to do HTML getting and sending
}
});
} catch (Exception e) {
Log.d(TAG, "Exceptions (submit button)" + e.toString());
}
}// end of InitialiseUI
ボタンがクリックされるまで、これらの値で何もする必要はありません。それらがListViewであるとしたら、もっと簡単でしょうか。それでも、それらを保存してローテーションで取得するという問題がまだあると思います。それが文字列であるオブジェクトmを持っているのに役立つなら、[][]私は一時的にそれらを何らかの方法で保存することができます