EditText Settext не работает с фрагментом

У меня есть фрагменты для 3 состояний экрана; Добавить, изменить и просмотреть. В Add я создаю сущность и сохраняю ее. В следующий раз я открою его в режиме просмотра и задаю имя объекта, используя

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

Я нажимаю на кнопку редактирования в режиме просмотра, чтобы открыть режим редактирования. Я изменяю здесь имя объекта и сохраняю его. Это возвращает меня к экрану просмотра. Но я считаю, что имя объекта не обновляется. Я отладил и обнаружил, чтоentity.getEntityname() имеет правильное значение. Я не уверен, почему текст редактирования не принимает новое значение.

Есть идеи?

Примечание: я использую Android версии 2.2

 Tushar Vengurlekar09 нояб. 2012 г., 07:58
Да, я использую библиотеку совместимости.
 Rajesh Rajaram09 нояб. 2012 г., 07:53
Фрагменты требуют API уровня 11 или выше
 Andy09 нояб. 2012 г., 07:55
@AndroidApple Я думаю, можно с уверенностью предположить, что он использует библиотеку совместимости -_-, поэтому он не ошибается в этом lmao

Ответы на вопрос(5)

Решение Вопроса

onCreateView, Таким образом, решение здесь состоит в том, чтобы сбросить текст вonResume, Это работает.

Также там's проблема в onActivityCreated. Я сбрасываю edittext 'Содержимое в OnStart, и это работает. [кредиты @savepopulation]

 Wirling01 авг. 2017 г., 09:29
Кажется, у меня та же проблема с Fragment.onViewCreated. Но перемещение всего в onResume решает проблему.
 fgysin03 окт. 2017 г., 09:32
Я думаю, что причина в том, что onCreateView не гарантированно работает в потоке пользовательского интерфейса, в то время как onResume есть. Если вы принудительно обновите поток пользовательского интерфейса (см., Например, этот ответ:stackoverflow.com/questions/9600629/settext-is-not-updatingВы должны быть в порядке, даже если этохелла уродливая
 Jona20 сент. 2013 г., 22:02
Я только столкнулся с этой проблемой и заметил, что это также будет работать, если вызвано onStart. Стоит отметить, что с использованием TextView все работает как положено, но как только вы начинаете использовать EditText или AutoCompleteTextView, вы начинаете сталкиваться с этими проблемами.
 Michaël Polla03 янв. 2017 г., 15:19
Для таких, как я, интересноЗачем" это неработать вonCreateViewХиммат Гилл дает некоторые объяснения в своем ответе ниже.
 Farzan06 мая 2016 г., 18:26
Невероятно !! Это заняло у меня несколько часов. Кто-нибудь сообщал об этом как об ошибке в Google или это по замыслу? Я сомневаюсь в последнем.
 skywall19 окт. 2014 г., 02:58
Если звонитsetText отOnActivityCreated Безразлично»тоже не работает. Большое спасибо. Потратьте часы на эту проблему.
 NARESH REDDY18 мар. 2014 г., 14:15
Это сработало, большое спасибо. Вы можете объяснить, почему возникла такая проблема?
 dd61929 апр. 2016 г., 18:45
отличный ответ !!! .. всегда используйтеonStart() установить значения по умолчанию во фрагменте ..

именно так вы должны реализовать свой фрагмент

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();
}
}<!---->
 Francois Csy De Glencoe22 нояб. 2015 г., 14:41
Это мой обычный способ получить ActionBar от родительского ViewController

onActivityCreated, Я сбрасываю edittext 'содержание вonStart и это работает.

у EditText, кажется, есть проблема со сбросом текста в onCreateView.

Это связано с тем, что после создания фрагмента до тех пор, пока мы не удалим его из backstack, будет вызван его метод onResume, поскольку представление больше не создается.

Поэтому решение здесь состоит в том, чтобы сбросить текст в onResume. Это будет работать постоянно, даже если вы блокируете и разблокируете экран, когда этот фрагмент открыт или вы возвращаетесь из другого фрагмента.

Однако, если вы устанавливаете эти данные из пакета, лучше сохранить это значение в переменной экземпляра, потому что пакет может иметь значение null, и тогда вы можете получить проблемы с нулевым указателем.

когда их контейнер отсоединен. Fragment.onViewCreated () должен быть вызван перед View.onSaveInstanceState (). Так что если вы установите значение в методе 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 () также возвращает false в классе TextView. Таким образом, TextView не будет сохранять состояние. код EditText.java:

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

EditText возвращает true, поэтому EditText должен сохранять состояние.

Есть несколько способов исправить эту ошибку:

1.implement EditText.getFreezesText () и вернуть false и очистить состояние выбора в EditText

2.implement onSaveInstanceState из EditText, вернуть null. Вот так:

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

3.use EditText.setSaveEnable (false);

4. добавить параметр в xml " saveEnable =»ложный'"

 Zhanyun Xiong07 июн. 2017 г., 06:08
Чувак, тыv спас мне жизнь!

Ваш ответ на вопрос