EditText Settext不能与片段一起工作

我有一个屏幕的3个状态的片段; 添加,编辑和查看。 在添加我创build一个实体并保存它。 下一次我在视图模式下打开它,并使用设置实体名称

EditText entityName = (EditText) view.findViewById(R.id.entityName); entityName.setText(entity.getEntityname()); 

我从查看模式点击编辑button打开编辑模式。 我在这里更改实体名称并保存。 这使我回到查看屏幕。 但是我发现实体名称没有更新。 我debugging,发现entity.getEntityname()具有正确的值。 我不知道为什么编辑文本不会带来新的价值。

有任何想法吗?

注意:我使用的是Android 2.2版本

Solutions Collecting From Web of "EditText Settext不能与片段一起工作"

EditText在重置onCreateView文本时出现问题。 所以这里的解决scheme是重置onResume的文本。 这工作。

onActivityCreated还有一个问题。 我在onStart重置edittext的内容,它的工作原理。 [信贷给@savepopulation]

如前所述,EditText在重置onCreateView中的文本时出现问题。

这是因为一旦创build了一个片段,直到我们将它从后台堆栈中删除,它的方法onResume将被调用,因为视图不会再被创build。

所以这里的解决scheme是重置onResume中的文本。 这将工作在任何时候,即使你locking和解锁你的屏幕,而这个片段是打开的,或者你从另一个片段回来

然而,如果你是从一个包中设置这个数据,那么在一个实例variables中这个值会更好,这会导致bundle可能会出现空错误,那么你可以得到空指针问题

onActivityCreated还有一个问题。 我在onStart重置edittext的内容,它的工作原理。

根据@TusharVengrulekar,这是你如何必须实现你的片段

 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(); } } 

在Android中有一些视图类应保存其状态,当他们的容器分离。 应该在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); .... } .... } 

有params来控制是否保存状态:“freezesText”和“hasSelection”。 TextView不能被选中,所以hasSelection是错误的。 函数getFreezesText()也在类TextView中返回false。 所以,TextView不会保存状态。 EditText.java的代码:

  @Override public boolean getFreezesText() { return true; } 

EditText返回true,所以EditText应该保存状态。

有一些方法来解决这个错误:

1.实现EditText.getFreezesText()并返回false,并在EditText中清除select的状态

2.实现EditText的onSaveInstanceState,返回null.like:

  public Parcelable onSaveInstanceState() { super.onSaveInstanceState(); return null; } 

3.使用EditText.setSaveEnable(false);

4.在xml中添加参数“saveEnable ='false'”