ユーザーがボタンを押して を表示する画面がありDialogFragment
ますEditText
。情報を入力し、 を押しOk
ます。もう一度ボタンを押すと、入力しEditText
た情報が表示され、すべて正常に動作するようにしました。
ただし、情報を入力して を押しOk
、オプション メニューを使用して別の画面を表示した場合、もう一度ボタンを押すfragment
と、情報は に表示されません。EditText
ユーザーがその画面から一瞬離れても、どうすれば情報を保存できますか? フラグメント クラスのメソッドが必要であり、コンストラクターの代わりにnewInstance
ホスティング アクティビティを呼び出す必要があると思います。newInstance
しかし、私はそれを実装する方法がわかりません。どんな助けでも感謝します。ありがとう!
SingleFragmentActivity
:
public abstract class SingleFragmentActivity extends FragmentActivity
{
protected abstract Fragment createFragment();
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);
FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.fragmentContainer);
if (fragment == null)
{
fragment = createFragment();
fm.beginTransaction()
.add(R.id.fragmentContainer, fragment)
.commit();
}
}
}
ホスティング アクティビティ AdviceActivity からの関連コード:
public class AdviceActivity extends SingleFragmentActivity
{
@Override
protected Fragment createFragment()
{
return new AdviceFragment();
}
}
ホスティング フラグメント AdviceFragment からの関連コード:
private boolean isTextButtonFirstClick = true;
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)
{
mTextButton = (Button) v.findViewById(R.id.textButton);
mTextButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
if (isTextButtonFirstClick)
{
FragmentManager fm = getActivity().getSupportFragmentManager();
InputTextFragment dialog = InputTextFragment.newInstance("", isTextButtonFirstClick);
dialog.setTargetFragment(AdviceFragment.this, REQUEST_TEXT);
dialog.show(fm, DIALOG_TEXT);
isTextButtonFirstClick = false;
}
else
{
FragmentManager fm = getActivity().getSupportFragmentManager();
InputTextFragment dialog = InputTextFragment.newInstance(mAdvice.getText(), isTextButtonFirstClick);
dialog.setTargetFragment(AdviceFragment.this, REQUEST_TEXT);
dialog.show(fm, DIALOG_TEXT);
}
}
});
...
}
DialogFragment InputTextFragment からの関連コード:
public static InputTextFragment newInstance(String text, boolean isTextButtonFirstClick)
{
Bundle args = new Bundle();
args.putSerializable(EXTRA_TEXTBUTTON_FIRSTCLICK, isTextButtonFirstClick);
args.putSerializable(EXTRA_TEXT, text);
InputTextFragment fragment = new InputTextFragment();
fragment.setArguments(args);
return fragment;
}
...
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
...
boolean isTextButtonFirstClick = getArguments().getBoolean(EXTRA_TEXTBUTTON_FIRSTCLICK);
final EditText editText = (EditText) v.findViewById(R.id.dialogInputEditText);
if (!isTextButtonFirstClick)
{
editText.setText(text);
editText.setSelection(text.length());
}
...
}
XML activity_fragment:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>