2013-07-29 24 views
5

Utworzono widoki do dynamicznego dodawania do układu za pomocą kliknięcia przycisku, ale gdy obracam krajobraz urządzenia, widoki znikają. Czy ktoś mógłby popatrzeć na mój kod i wyjaśnić, jak temu zapobiec?Dynamicznie dodane widoki znikają w orientacji w systemie Android.

Oto kod:

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); 

} 

} 

Odpowiedz

-1

Dodaj następujący wiersz do TestContainerActivity aktywności

android:ConfigChanges="keyboardHidden|orientation" 
3

Dodaj tę linię w swoim manifest.xml tagi.

android:configChanges="keyboardHidden|orientation|screenSize" 

Pozwoli to uniknąć powtarzania zmian w orientacji.

1

Lepiej jest spróbować odtworzyć układ w nowej orientacji, niż po prostu zapobiec zmianie orientacji.

W swojej jednostce onCreate sprawdź, czy jest zapisana instancja (w wyniku zmiany orientacji), np.

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

Może być konieczne zachowanie pewnych wartości (w Shared Prefs lub onSavedInstanceState).

Takie podejście jest trudniejsze niż zablokowanie orientacji, ale jest to lepsze podejście na dłuższą metę i jest warte wysiłku badawczego.