我有3个屏幕状态的片段;添加,编辑和查看。在Add中,我创建一个实体并保存它。下次我在View模式下打开它并使用设置实体名称
EditText entityName = (EditText) view.findViewById(R.id.entityName);
entityName.setText(entity.getEntityname());
我从“查看”模式中单击“编辑”按钮以打开“编辑”模式。我在这里更改实体名称并保存。这让我回到了视图屏幕。但我发现实体名称没有更新。我调试并发现entity.getEntityname()
具有正确的价值。我不确定编辑文本为什么不采用新值。
有任何想法吗?
注意:我使用的是Android 2.2版
EditText似乎在重置onCreateView
中的文本时出现问题。所以这里的解决方案是重置onResume
中的文本。这有效。
在onActivityCreated中也存在问题。我在onStart中重置edittext的内容并且它可以工作。 [积分给@savepopulation]
Android中有一些View类应该在分离容器时保存它们的状态。应在View.onSaveInstanceState()之前调用Fragment.onViewCreated()。因此,如果您在方法Fragment.onViewCreated()中设置一个值。应在View.onRestoreInstanceState(Parcelable状态)方法中清除该值。
例如,类TextView,RecyclerView等。您可以读取TextView.java的代码:
public Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();
// Save state if we are forced to
final boolean freezesText = getFreezesText();
boolean hasSelection = false;
int start = -1;
int end = -1;
....
if (freezesText || hasSelection) {
SavedState ss = new SavedState(superState);
....
}
....
}
有控制是否保存状态的参数:“freezesText”和“hasSelection”。无法选择TextView,因此hasSelection为false。函数getFreezesText(),在类TextView中也返回false。因此,TextView不会保存状态。 EditText.java的代码:
@Override
public boolean getFreezesText() {
return true;
}
EditText返回true,因此EditText应该保存状态。
有一些方法来解决这个bug:
1.Implement EditText.getFreezesText()并返回false,并清除EditText中的select状态
2.实现EditText的onSaveInstanceState,返回null。如下:
public Parcelable onSaveInstanceState() {
super.onSaveInstanceState();
return null;
}
3.使用EditText.setSaveEnable(false);
4.add param in xml“saveEnable ='false'”
如前所述,EditText似乎在onCreateView中重置文本时出现问题。
这是因为一旦创建了一个片段,直到我们从backstack中删除它,它的方法onResume将被调用,因为视图不会再次创建。
所以这里的解决方案是重置onResume中的文本。即使您在打开该片段或从另一个片段返回时锁定并解锁屏幕,这也将一直有效
但是,如果你从一个bundle中设置这个数据,那么实例变量中的值会更好,因为bundle可能会变为null而你可以得到null指针问题然后
onActivityCreated
也有一个问题。我在onStart
中重置了edittext的内容并且它有效。
根据@TusharVengrulekar,您必须实现Fragment
public class ActionBar extends Fragment {
private TextView lbl_title;
private String title;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_action_bar, container, false);
title = "Contacts";
lbl_title = (TextView) view.findViewById(R.id.lbl_title);
return view;
}
@Override
public void onStart(){
super.onStart();
lbl_title.setText(title);
}
@Override
public void onResume(){
super.onResume();
}
}<!---->