0

У меня есть несколько фрагментов здесь, и есть этот один фрагмент, где я хочу сохранить его состояние, когда вернусь к нему. Я попытался сделать это в тестовом фрагменте, где, когда я нажимаю кнопку, текст текста будет изменен на «test1» (текст текста по умолчанию - «Новый текст»). Таким образом, текстовое изменение изменяет текст, но когда я перехожу в другой фрагмент и возвращаюсь к нему (HomeFragment), текстовое изображение переходит в текст состояния по умолчанию («Новый текст»). Поэтому я думаю, что savedInstanceState не работает, потому что, если это так, он должен иметь «test1», когда я вернусь к фрагменту. Вот мой код:Fragment savedInstanceState не работает

public class HomeFragment extends Fragment { 
    public Button button; 
    public TextView txt_test; 
    public String data_test; 
    public HomeFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_home, container, false); 

     return view; 
    } 

    public void onActivityCreated(Bundle savedInstanceState){ 
     super.onActivityCreated(savedInstanceState); 
     if(savedInstanceState == null){ 

     } 
     else{ 
      data_test = savedInstanceState.getString("txt_test"); 
      txt_test = (TextView) getActivity().findViewById(R.id.textView2); 
      txt_test.setText(data_test); 
     } 
     button = (Button) getActivity().findViewById(R.id.button3); 
     txt_test = (TextView) getActivity().findViewById(R.id.textView2); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       txt_test.setText("test1"); 

      } 
     }); 
    } 

    public void onSaveInstanceState(Bundle savedInstanceState){ 
     super.onSaveInstanceState(savedInstanceState); 
     savedInstanceState.putString("txt_test",data_test); 
    } 

} 
+0

'onActivityCreated' работает ** после **' onCreateView', так что вы перезаписать текст в TextView. – EpicPandaForce

+0

Спасибо, что заметили мой пост, @EpicPandaForce. Поэтому сначала я должен включить onActivityCreated, а затем OnCreateView. Это то, что вы предлагаете? – IWantToBeAnAnonymous

+0

no, вы должны переместить '' if (savedInstance == null) 'stuff в метод' onActivityCreated' (на самом деле вам нужно просто переместить все это в 'onViewCreated()') – EpicPandaForce

ответ

0
public class HomeFragment extends Fragment { 
    Button button; 
    TextView txt_test; 
    String data_test; 

    public HomeFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_home, container, false); 
     txt_test = (TextView) view.findViewById(R.id.textView2); 
     button = (Button) view.findViewById(R.id.button3); 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       txt_test.setText("test1"); 
      } 
     }); 

     if(savedInstanceState == null) { 
      // do nothing 
     } else { 
      data_test = savedInstanceState.getString("txt_test"); 
      txt_test.setText(data_test); 
     } 
     return view; 
    } 

    @Override 
    public void onSaveInstanceState(Bundle savedInstanceState){ 
     super.onSaveInstanceState(savedInstanceState); 
     savedInstanceState.putString("txt_test",data_test); 
    } 
} 
+0

Здравствуйте, @EpicPandaForce. Спасибо за ваш ответ, я попробовал ваш ответ, я проверил его, изменив ориентацию. Оно работает! Но, когда я перехожу к другому фрагменту (FragmentB), вернитесь к этому фрагменту (FragmentA). Текст ушел. Любые идеи почему? – IWantToBeAnAnonymous

+0

Вы возвращаетесь с нажатием Назад, а другой фрагмент добавляется в стопку, верно? Он также должен работать на спине .... – EpicPandaForce

+0

Здравствуйте, @EpicPandaForce. Боюсь, что нет. Я использую навигационный ящик. Так, например, я открываю навигационный ящик, я перехожу к фрагменту a, нажимаю кнопку, после чего текст текста изменяется. Затем я открываю навигационный ящик, я перехожу к фрагменту B. Затем я открываю навигационный ящик, затем перехожу к фрагменту A. – IWantToBeAnAnonymous

Смежные вопросы