I have fragments for 3 states of a screen; Add, Edit and View. In Add I create an entity and save it. Next time I open it in View mode and set the entity name using
EditText entityName = (EditText) view.findViewById(R.id.entityName);
entityName.setText(entity.getEntityname());
I click on edit button from View mode to open the Edit mode. I change the entity name here and save it. This brings me back to the view screen. But I find the entity name is not updated.
I debug and found that entity.getEntityname()
is having correct value. I am not sure why the edit text does not take new value.
Any ideas?
Note: I am using android version 2.2
There are some classes of View in Android should save their status when their container is detached. Fragment.onViewCreated() should be called before View.onSaveInstanceState(). So if you set a value in the method Fragment.onViewCreated(). The value should be cleared in the method View.onRestoreInstanceState(Parcelable state).
For example,class TextView,RecyclerView and so on.You can read the code of TextView.java:
There are to params to control whether to save the state: "freezesText" and "hasSelection". TextView can't be selected,so hasSelection is false. the function ,getFreezesText(),return false in class TextView too. So,TextView would not save the state. the code of EditText.java:
EditText return true,so EditText should save the state.
According to the @TusharVengrulekar , this is how you must implent your Fragment
As mentioned earlier, the EditText appears to have an issue with resetting text in onCreateView.
This is because once a fragment is created , till the time we remove it from the backstack, its method onResume would be called as the view is not created again.
So the solution here is to reset the text in onResume. This will work on all times even if u lock and unlock ur screen while that fragment is open or you are coming back from another fragment
However if you are setting this data from a bundle it is better tonsave that value in an instance variable cause the bundle might come null amd u can gett null pointer issues then
Also there's an issue in onActivityCreated. I reset edittext's content in onStart and it works.
The EditText appears to have an issue with resetting text in
onCreateView
. So the solution here is to reset the text inonResume
. This works.