我有一个屏幕,用户按下一个按钮来调出一个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 活动片段:
<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>