我想在片段的onCreateView函数上添加一些数据到我的视图。 奇怪的是,如果我每次生成随机ID,logcat很好地显示,它们都是不同的,但在我的EditText只显示每次运行时的第一个。
代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
String randomId = new Random().nextInt(10000) + "";
Log.i("onCreateView()", randomId);
testEdit.setText(randomId);
return super.onCreateView(inflater, container, savedInstanceState);
}
日志:
07-14 12:30:10.369: I/onCreateView()(4622): 6163
07-14 12:30:36.234: I/onCreateView()(4622): 5706
07-14 12:30:38.516: I/onCreateView()(4622): 2258
07-14 12:30:41.930: I/onCreateView()(4622): 4761
所以当我第一次导航到我的片段时,我的EditText显示为6163。 之后,我导航到另一个片段,然后再次回到有问题的片段。 新的随机ID为5706 ,如logcat的第二行所示,但我的EditText仍然显示为6163.
无论重复多少次,EditText只会显示第一个值而不会刷新。
为什么???
OnCreateView肯定会被调用,我的randomIds肯定会有所不同,我的视图现在仍然令人耳目一新。为什么呢?
我将这个替换函数用于我的片段,可能这是错误的实现:
public void replace(Fragment fragmentToChange) {
fragmentTransaction = act.getFragmentManager().beginTransaction();
fragmentTransaction.replace(container.getId(), fragmentToChange, fragmentToChange.getClass().getSimpleName());
if (getCurrentFragment() != null && getCurrentFragment() != fragmentToChange) {
fragmentTransaction.addToBackStack(fragmentToChange.getClass().getSimpleName());
}
fragmentTransaction.commit();
}
答案 0 :(得分:1)
试试这个
View view = inflater.inflate(R.layout.fragment, container, false);
String randomId = new Random().nextInt(10000) + "";
testEdit = view.findViewById(R.id.testEdit);
Log.i("onCreateView()", randomId);
testEdit.setText(randomId);
return view;
答案 1 :(得分:0)
如果从此处返回视图,稍后将在发布视图时在onDestroyView()中调用。
当片段第一次绘制其用户界面时,系统会调用此方法。
试试这个
DiplayFragment newFragment = new DiplayFragment();
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
transaction.replace(R.id.nav_fl_frag_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
答案 2 :(得分:0)
像这样更改片段
getFragmentManager().beginTransaction().replace(R.id.container, new Article()).commit();
其中Article是Fragment,而container是FrameLayout的id