2013-07-29 8 views
5

Ich habe die Ansichten erstellt, die dynamisch zu einem Layout hinzugefügt werden sollen, wenn ich auf die Schaltfläche klicke, aber wenn ich die Gerätelandschaft rotiere, verschwinden die Ansichten. Könnte jemand bitte meinen Code anschauen und erklären, wie man das verhindern kann. HierDynamisch hinzugefügte Ansichten verschwinden beim Orientieren in Android

ist der Code:

public class TestContainerActivity extends Activity implements OnClickListener { 

LinearLayout containerLayout; 
Button testButton; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_test_container); 

    testButton = (Button)findViewById(R.id.testContainerButton1); 
    testButton.setOnClickListener(this);   
    containerLayout = (LinearLayout)findViewById(R.id.testContainerLayout); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.test_container, menu); 
    return true; 
} 


@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    if(v==testButton){ 

     createNewLayout(); 

    } 
} 

public void createNewLayout(){ 

     LayoutInflater layoutInflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View addView = layoutInflater.inflate(R.layout.container, null); 
     TextView textviewTest = (TextView)addView.findViewById(R.id.containerTextView4); 
     textviewTest.setText("TextView"); 

     containerLayout.addView(addView); 

} 

} 

Antwort

-1

Fügen Sie die folgende Zeile in die TestContainerActivity Aktivität

android:ConfigChanges="keyboardHidden|orientation" 
3

Fügen Sie diese Zeile in Ihrer manifest.xml-Tags.

android:configChanges="keyboardHidden|orientation|screenSize" 

Dadurch wird vermieden, dass Ihre Aktivität bei einer Orientierungsänderung neu erstellt wird.

1

Es ist besser zu versuchen, das Layout in der neuen Ausrichtung neu zu erstellen, anstatt nur die Ausrichtung zu ändern.

Überprüfen Sie in Ihrem onCreate, ob es eine gespeicherte Instanz (als Ergebnis der Orientierungsänderung) gibt, z.

if (savedInstanceState == null) { 
     //create new button layout if previously clicked 
} 
else { 
     //normal start 
} 

Möglicherweise müssen einige Werte (entweder in Geteilt Prefs oder onSavedInstanceState) halten.

Dieser Ansatz ist schwieriger als das Sperren der Ausrichtung, aber auf lange Sicht ist es ein besserer Ansatz und lohnt sich auf jeden Fall.