У меня есть экран, на котором пользователь нажимает кнопку, чтобы вызвать 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>
Благодарим за ответ! Когда вы говорите, чтобы изменить код в 'Activity', вы имеете в виду изменить код в' AdviceActivity' или 'SingleFragmentActivity'? Я очень новичок в Android, поэтому не уверен. Другие фрагменты Действия также расширяют «SingleFragmentActivity». – pez
Без проблем :) Я имел в виду SingleFragmentActivity. Если эти шаги не работают, я бы хотел, чтобы вы делили XML-файл «R.layout.activity_fragment». – cYrixmorten
Спасибо. Прошлой ночью я обновил SingleFragmentActivity с вашим кодом, но Android Studio показала ошибку, заявив, что ожидается интерфейс или класс, я думаю. Вместо этого я сделал AdviceActivity расширением FragmentActivity и реализовал там свой код, и, хотя у него нет ошибок, проблема все же возникла. Я поделюсь XML, как только вернусь домой с работы сегодня, и я еще раз прокомментирую, чтобы обновить вас. Еще раз спасибо за помощь – pez