同じアクティビティで複数のレイアウトを呼び出すプログラムを作成していますが、レイアウトを切り替えると、スイッチの前に加えられた変更は復元されず、onSavedInstanceState(Bundle outState)
は呼び出されません。手動でメソッドを呼び出そうとしましたが、バンドルを取得できませんoutState
手動でonSaveInstanceState()を呼び出す方法
質問は本当にあります:選択した時点で呼び出されるアクティビティの現在の状態を取得して保存するにはどうすればよいですか?
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact_view);
// more code
}
@Override
public void onBackPressed() {
if (layoutId == R.layout.activity_contact_view) exit();
else if (layoutId == R.layout.main) {
Toast.makeText(NsdChatActivity.this, "Successful back button action", Toast.LENGTH_SHORT).show();
setContentView(R.layout.activity_contact_view);
refreshContactList();
}
}
そして別々のクラスから
public void updateList(final int found) {
LinearLayout layxout = (LinearLayout) ((Activity)mContext).getWindow().getDecorView().findViewById(R.id.others);
TextView t = new TextView(mContext);
t.setClickable(true);
t.setText(found + ". " + activity.sNames.get(found));
t.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
t.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//show chat view
activity.setContentView(R.layout.main);
TextView name = (TextView)activity.findViewById(R.id.clientName);
name.setText(activity.sNames.get(found).split(" \\(")[0]);
final ScrollView scroll = (ScrollView)activity.findViewById(R.id.scroll);
scroll.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
scroll.fullScroll(View.FOCUS_DOWN);
}
});
}
});
layxout.addView(t);
}
レイアウトを切り替えると、アクティビティが暗黙的に再作成されますか?そうでなければ、 'onSavedInstanceState(Bundle outState)'は呼び出されません。 – Enzokie
私を許しますが、暗黙のうちに再現したと言ったときの意味を説明できますか?私は 'setContentView()'を使ってレイアウトを切り替えます。 – kbluue
良い例:デバイスを回転させると、アクティビティが破棄されて再作成されるため、アクティビティを再作成するよう指示することはないため、暗黙のアクティビティレクリエーションになります。 – Enzokie