I'm a beginner on Android and I have already read several topics on this issue, but I can not get this to work on my app.
I've two layouts :
- activity_home (android:id="@+id/home_container")
- activity_signs (android:id="@+id/signs_container").
I've two Activities :
HomeActivity, nothing special :
public class HomeActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); getSupportFragmentManager().beginTransaction() .replace(R.id.home_container, new HomeFragment()) .commit(); } }
SignsActivity, where I want to save my values when rotating the smartphone :
public class SignsActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_signs); if (savedInstanceState == null) { SignsFragment signsFragment = new SignsFragment(); signsFragment.setArguments(getIntent().getExtras()); getSupportFragmentManager().beginTransaction() .replace(R.id.signs_container, signsFragment, "SIGNS_FRAGMENT_TAG") .commit(); } else { SignsFragment signsFragment = (SignsFragment)getSupportFragmentManager() .findFragmentByTag("SIGNS_FRAGMENT_TAG"); } } }
I've two Fragments :
HomeFragment, where I want to send data :
public class HomeFragment extends Fragment { String language; public HomeFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View rootView = inflater.inflate(R.layout.activity_home, container, false); language = "french"; Button displayView = (Button) rootView.findViewById(R.id.display); if (displayView != null) { displayView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { EditText signView = (EditText) rootView.findViewById(R.id.sign_number); String signNumber = signView.getText().toString(); if (!signNumber.equals("")) { int number = Integer.parseInt(signNumber); Bundle bundle = new Bundle(); bundle.putString("language", language); bundle.putInt("signNumber", number); FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager() .beginTransaction(); SignsFragment signsFragment = new SignsFragment(); signsFragment.setArguments(bundle); fragmentTransaction.replace(R.id.signs_container, signsFragment); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } } }); } return rootView; } }
SignsFragment, where I want to receive data :
public class SignsFragment extends Fragment { private String language; private int signNumber; private View rootView; public SignsFragment() { // Required empty public constructor } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("language", language); outState.putInt("signNumber", signNumber); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Bundle bundle = getArguments(); if (bundle != null) { language = bundle.getString("language"); signNumber = bundle.getInt("signNumber", 1); } else { if (savedInstanceState != null) { // Restore last state language = savedInstanceState.getString("language"); signNumber = savedInstanceState.getInt("signNumber"); } else { language = "french"; signNumber = 1; } } return inflater.inflate(R.layout.activity_signs, container, false); } }
The app closes when I click the button on the home, while I want to retrieve the data in signs. Can anyone help me correct my mistake ?
Thank you in advance for your answers.