setText 方法在 onViewCreated 方法中不起作用
详细信息片段 -> 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));
}
当第一次打开 DetailsFragment
时,titleEditText
将从 x
变量中获取生成的数字(假设它 >528
)
在 DetailsFragment
内部有一个按钮,可以将我导航到 BFragment
片段。
当导航到 BFragment
片段并执行某些任务时,我将按后退按钮返回 DetailsFragment
我期望的结果是什么?
从 BFragment
返回到 DetailsFragment
,x
变量将采用一个新的随机数(假设它是 362
)并放入它在里面titleEditText
。
当前结果是什么?
titleEditText
中的文本仍然具有 528
值,但必须采用 362
值
注释
- 如果我将代码放在
onResume
方法中,效果会很好。 - 我正在使用带有 backstack 的导航组件库。
改进了问题(添加了更多详细信息)
我构建了一个带有 2 个片段的简单应用程序来向您展示我的问题
通过 视频,先生 Cheticamp,如果视频无法播放请告诉我,我会将其上传到 Youtube。
这是第一次运行应用时的Logcat
这是从 SecondFragment 返回到 FirstFragment 时的 Logcat
这是 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);
}
}
这是 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());
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论