2 years ago
#341211
Taha Sami
setText method does not work inside the onViewCreated method
DetailsFragment -> onCreateView
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (fragmentBinding == null)
fragmentBinding = FragmentDetails.inflate(inflater, container, false);
return fragmentBinding.getRoot();
}
DetailsFragment -> onViewCreated
@Override
public void onViewCreated(@NonNull View view, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
int x = new Random().nextInt(10000);
Log.w("Result", "... " + x);
fragmentBinding.titleEditText.setText(String.valueOf(x));
}
When open DetailsFragment for the first time, titleEditText will take the generated number from the x variable (Let's suppose it 528)
Inside DetailsFragment there is a button that will navigate me to the BFragment fragment.
When navigating to the BFragment fragment and doing some tasks, I will press the back button for back to DetailsFragment
What do I expect the result?
When back from BFragment to DetailsFragment the x variable will take a new random number (Let's suppose it 362) and put it inside titleEditText.
What is the current result?
The text inside titleEditText still have 528 value but it must take 362 value
Notes
- It's working well if I put the code inside the
onResumemethod. - I'm using the navigation component library with backstack.
Improved the question (Added more details)
I built a simple app with 2 fragments to show you my problem
Watch the result via the video on streamable.com, Mr Cheticamp, If the video doesn't work tell me and I'll upload it to Youtube.
Here is the Logcat when running the app for the first time
And this is the Logcat when back from SecondFragment to FirstFragment
Here is the code for FirstFragment
public class FirstFragment extends Fragment {
private FragmentFirstBinding fragmentFirstBinding;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.w("FirstFragment", "onCreate");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.w("FirstFragment", "onCreateView");
if (fragmentFirstBinding == null)
fragmentFirstBinding = FragmentFirstBinding.inflate(inflater, container, false);
return fragmentFirstBinding.getRoot();
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Log.w("FirstFragment", "onViewCreated");
fragmentFirstBinding.btnFirst.setOnClickListener(view1 -> Navigation.findNavController(view1).navigate(FirstFragmentDirections.actionFirstFragmentToSecondFragment()));
int x = new Random().nextInt(10000);
fragmentFirstBinding.edittext.setText(String.valueOf(x));
Log.w("FirstFragment - X Value", "... " + x);
}
}
And here is the code for SecondFragment
public class SecondFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_second, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.findViewById(R.id.btnSecond).setOnClickListener(view1 -> Navigation.findNavController(view1).popBackStack());
}
}
android
android-fragments
android-architecture-navigation
0 Answers
Your Answer

