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

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

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

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

какие идеи?

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

5 ответов


У EditText появляется проблема с сбросом текста в onCreateView. Таким образом, решение здесь-сбросить текст в onResume. Эта работа.

также есть проблема в onActivityCreated. Я сбросил содержимое edittext в onStart, и он работает. [кредиты @savepopulation]


Как упоминалось ранее, EditText, похоже, имеет проблему с сбросом текста в onCreateView.

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

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

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


также есть проблема в onActivityCreated. Я сбросил содержимое edittext в onStart, и он работает.


согласно @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 должны сохранить свой статус, когда их контейнер отсоединен. Фрагмент.onViewCreated () должен вызываться перед представлением.данные метода onsaveinstance(). Поэтому, если вы установите значение в фрагменте метода.onViewCreated(). Значение должно быть очищено в представлении метода.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 является false. функция getFreezesText () также возвращает false в классе TextView. Таким образом, TextView не сохранит состояние. код полей EditText.java:

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

полей EditText возвращать true,так что полей EditText должны сохранить государство.

там какой-то метод, чтобы исправить эту ошибку:

1.осуществлять полей EditText.getFreezesText () и возвращает false, а также очистите состояние select в EditText

2.реализовать данные метода onsaveinstance полей EditText, возвратиться null.вот так:

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

3.использование полей EditText.setSaveEnable (false);

4.добавьте параметр в xml "saveEnable= 'false'"