EditText Settext不能与片段一起工作

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

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

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

有任何想法吗?

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

  • 软键盘隐藏了EditText的一半
  • 为什么Android使用相同的ID更改EditTexts的值?
  • 如何将EditText长度限制为7个整数和2个小数位?
  • 为什么我的EditText复制/粘贴菜单位于EditText下? 如何更改popup窗口的z顺序?
  • Android编辑文本alignment
  • Android:如何通过右侧的交叉按钮清除EditText
  • EditText上的InputFilter导致重复文本
  • 发送退格键事件以编辑文本
  • 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'”