2016-05-08 6 views
-1

У меня есть активность, где я поместил 5 фрагментов для процесса регистрации. Первый фрагмент имеет два текста редактирования и текстовое представление. Редактирование текстов для первого и последнего имени и текстового представления приведет меня к следующему фрагменту2. Когда я возвращаюсь из frag2 в frag 1, эти значения firstname и lastname исчезают. Я попытался хранить значения в методе onSavedInstance с помощью метода putString и получить его в методе onCreate, но не помогая. Вот код ...Сохранять значения в EditTexts фрагмента при возврате

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if(savedInstanceState==null){ 

    } 
    else{ 
     firstName=savedInstanceState.getString("firstname"); 
     lastName=savedInstanceState.getString("lastname"); 
     fname.setText(firstName); 
     lname.setText(lastName); 
    } 
} 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.frag1,container,false); 
    fname = (EditText) rootView.findViewById(R.id.si_firstname); 
    lname = (EditText) rootView.findViewById(R.id.si_lastname); 
    firstName = fname.getText().toString(); 
    lastName = lname.getText().toString(); 
    next1 = (TextView) rootView.findViewById(R.id.next1);  


    next1.setOnClickListener(new View.OnClickListener() { //takes to frag2. 
     @Override 
     public void onClick(View v) { 

      if(firstName.isEmpty() || lastName.isEmpty()){ 
       Toast.makeText(getActivity().getApplicationContext(), "no name", Toast.LENGTH_LONG).show(); 
      } 
      else { 

       FragmentManager fragmentManager = getFragmentManager(); 
       FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
       fragmentTransaction.replace(R.id.fragment_container, secondFragment); 
       fragmentTransaction.commit(); 
      } 
     } 
    }); 

    return rootView; 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 

    outState.putString("firstname", firstName); 
    outState.putString("lastname", lastName); 
} 
+0

как вы вернетесь к fragment1, с помощью кнопки возврата? – varunkr

+0

Да назад кнопка на frag 2 ... –

+0

Вы попробовали мой ответ? – varunkr

ответ

0

Вместо

fragmentTransaction.replace(R.id.fragment_container, secondFragment); 

Использование

fragmentTransaction.add(R.id.fragment_container, secondFragment); 

Редактировать

Если это не работает, то вам придется использовать addToBackstack в вашей сделке, это наверняка сработает. Однако вам также необходимо переопределить функцию onBackPressed в главной операции и popbackStack, чтобы выскочить фрагмент, прежде чем вернуться к предыдущему. This - это то, как вам нужно переопределить его.

+0

использовать метод добавления перед тем, чтобы приземлиться, чтобы заменить, но то же самое ... –

+0

@AalapPatel посмотреть на изменения – varunkr

0

Похоже, вы перезаписываете данные сохраненногоInstance, которые вы получаете в своем onCreate, со значениями, которые вы устанавливаете в onCreateView. Попробуйте закомментировать код в onCreate и заменить верхние строчки в вашей onCreateView с:

View rootView = inflater.inflate(R.layout.frag1,container,false); 
fname = (EditText) rootView.findViewById(R.id.si_firstname); 
lname = (EditText) rootView.findViewById(R.id.si_lastname); 
next1 = (TextView) rootView.findViewById(R.id.next1); 

if(savedInstanceState != null){ //the data's on the savedinstance 
    firstName = savedInstanceState.getString("firstname"); 
    lastName = savedInstanceState.getString("lastname"); 
    //restore the editTexts 
    fname.setText(firstName); 
    lname.setText(lastName); 
}else{ 
    firstName = fname.getText().toString(); 
    lastName = lname.getText().toString(); 

    //whatever you want to do on the first run 
    //or if the data's not on the savedInstance 
} 

//whatever else you want to do on every run 
Смежные вопросы