Question

In my application, the layout is created in java following this code:

frameLayout = new FrameLayout(this);
frameLayout.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

HorizontalScrollView HSC = new HorizontalScrollView(this);
HSC.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER));
frameLayout.setBackgroundResource(R.drawable.lavagna1);       
ScrollView VSC = new ScrollView(this);
VSC.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
TableLayout tableLayout = new TableLayout(this);
tableLayout.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));  

inflater = (LayoutInflater) SecondaAttivitaEQ.this.getSystemService(LAYOUT_INFLATER_SERVICE);

layout = inflater.inflate(R.layout.keyboardmatrix,(ViewGroup) findViewById(R.id.ciao));

    for ( int i = 0; i < grado; i++) {
        tableRow = new TableRow(this); 
        tableRow.setGravity(Gravity.CENTER);

        for (int j = 0; j < 1; j++) {

            valore[i][j].setHint(" c" + i + " ");
            valore[i][j].setPadding(10, 10, 10, 10);
            tableRow.addView(valore[i][j]);
            tableLayout.addView(tableRow);

        }
     }

    VSC.addView(tableLayout);
    HSC.addView(VSC);
    frameLayout.addView(HSC);
    setContentView(frameLayout);

    secondo = new Button (this);
    secondo.setText("SOLVE");
    secondo.setTextColor(0xffffffff);
    secondo.setBackgroundResource(R.drawable.but_ok);
    tableLayout.addView(secondo);

This code creates a table of EditText, the problem lies in the rotation of the screen, in fact if I enter values ​​in the EditText and the phone is rotated, the app recreates the layout by deleting all of the content of the EditText. Can you help me solve this problem?

Was it helpful?

Solution

Everytime orientation change, android create new view and destroy the old one. You can save your data when orientation change and re-initialize when the new view is created

Use onConfigurationChanged method of activity to detect Orientation Change

public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
  }

Update AndroidManifest.XML like this to include the android:configChanges

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top