Androidに新しくなったので、私は小さなプログラムを書いて、どのように動作するかに精通しています。 これまでに頭痛を与えてきたことは、画面回転と組み合わせて実行時に作成されたビューです。画面の回転を横切ってビューを維持する
小包を使用しようとすることが少ししかなかったので、回転後にビューを再作成するだけで問題を解決しました。
プログラムは、入力したテキストをTextViewとして、EditTextの下にあるTableLayoutに追加します。
これを解決する良い方法はありますか?私はこれを行うための方法の "out of the box"を見つけることができませんでした。
public class MWEActivity extends Activity {
TableLayout table;
EditText txtInput;
ArrayList<String> savedEntry = new ArrayList<String>();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
table = (TableLayout)this.findViewById(R.id.table);
txtInput = (EditText)this.findViewById(R.id.txtInput);
txtInput.setOnEditorActionListener(new OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN){
TextView newtext = new TextView(getApplicationContext());
newtext.setText(txtInput.getText());
savedEntry.add(newtext.getText().toString());
table.addView(newtext);
txtInput.setText("");
return true;
}
return false;
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putStringArrayList("entry", savedEntry);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
if(savedInstanceState.getStringArrayList("entry") == null){
savedEntry = new ArrayList<String>();
savedEntry.add("Return was NULL");
}else{
savedEntry = savedInstanceState.getStringArrayList("entry");
}
for(String s : savedEntry){
TextView tv = new TextView(getApplicationContext());
tv.setText(s);
table.addView(tv);
}
super.onRestoreInstanceState(savedInstanceState);
}
}
@Knabber:動的フラグメントを使用している場合は、 'setRetainInstance(true)'を使用して、 'android:configChanges'アプローチのメリットを多く得ることができます。動的フラグメントを使用していない場合でも、 'onSaveInstanceState()'と 'onRetainNonConfigurationInstance()'を使用してアクティビティインスタンス間で*データ*を移動できます。特に、onSaveInstanceState()は、設定変更以外のシナリオでも役に立ちます。これらのアプローチの1つを使用してください。 – CommonsWare
@CommonsWare:あなたのコメントを回答として投稿できますか? – seeker
@Knabber:これをただ受け入れてください。彼の答えは正しい - 私は単に明らかにした。 – CommonsWare