0

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を持っているのに役立つなら、[][]私は一時的にそれらを何らかの方法で保存することができます

4

2 に答える 2

1

私がする必要があるのは、私の編集テキストにIDを追加することだけでした:

    rowEditText.setId(i)
于 2012-11-26T07:24:36.113 に答える
0

コードで作成されたEditTextsを保存する方法

実行時にレイアウトにオブジェクトを追加する場合は、onRetainNonConfigurationInstance ()を使用するか、フラグメントを使用する場合はsetRetainInstance()を使用します。

于 2012-11-25T23:02:52.900 に答える