2

Мне сложно понять жизненный цикл моего фрагмента, когда тот же фрагмент создается на трех вкладках. Основной виджет в каждом фрагменте - это объект EditText, который отслеживается в классе, который я создал, по одному на вкладку, создаваемом при первом выполнении моего приложения. Когда приложение выполняет ввод (который предоставляется кнопками на экране, а не клавиатурой), накладывается текст на EditText второй вкладки.Как использовать EditText из одного фрагмента на вкладках?

Ввод представляется следующим getItem() внутри моего FragmentPagerAdapter. Я понимаю, что getItem() вызывается дважды, когда мои вкладки создаются и что это совершенно нормальное поведение, но то, что я не понимаю, - это проблема фокуса или логическая проблема с моим дизайном кода (я надеюсь, что первый). Может ли это иметь дело с instantiate(), возвращаемым getItem()? Как только instantiate() вызывается, фокус всегда следует за ним, так как у меня есть эта строка кода в onCreateView() моего фрагмента?

active.editLine = (EditText) v.findViewById(R.id.display); 
// active is the currently active object of my app's class. 

Причина Подозреваю instantiate() вызывает мою ошибку, потому что, когда я увеличил рендеринг страниц через setOffscreenPageLimit(2) текст был быть отправлен на третью вкладку.

На этом этапе я попытался отследить, что происходит там, где это было хорошим учебным упражнением. То, что я обнаружил в своей борьбе, было, вероятно, вопросом фокуса, однако мои попытки устранить фокус и фокус настройки, похоже, не были применены, и я даже не уверен, что это основная проблема. Я закончил тем, что использовал active.editLine.debug(0), чтобы увидеть, был ли фокус потерян или получен, и это не так. Я прочитал некоторые из this fairly popular post и сосредоточил внимание на своем XML, но это тоже не помогло.

Просто чтобы убедиться, где я должен устанавливать объекты EditText? В OnCreateView() в моем фрагменте? Именно здесь находится код выше. Я создаю три объекта своего пользовательского класса в своей деятельности как глобальные переменные. У меня есть получатели и сеттеры в том, что я чувствую, являются подходящими областями моего кода. Должен ли приведенный выше код жить в onCreate() моего фрагмента? Если вы считаете, что это проблема фокуса, каков приемлемый метод отключения фокуса и использовать его только тогда, когда он мне нужен? Что еще более важно, когда мое приложение сначала запускается, где я включаю фокус? OnTabSelected() вызывается до getItem() выполняется дважды, чтобы отобразить первые две вкладки. Итак, где я могу получить первоначальный фокус, если я буду глобально отключать его? Можно настроить фокус с помощью типа слушателя?

ответ

1

Не совсем уверен, что вы собираетесь здесь, но вот несколько советов:

  • иметь свой глобальный активный объект обитающего в основной деятельности и называет getActivity().someObject из ваших фрагментов
  • findViewById() будет искать вниз иерархию представлений до тех пор, пока не найдет первый экземпляр R.id.display
  • ваши фрагменты будут недоступны до тех пор, пока вы не зафиксируете их с транзакцией фрагмента, это означает, что их представления также будут недоступны до этого времени
  • вы «обзорные» findViewById() в какое-то точке зрения v по телефону v.findViewById()
  • если вы листать фрагменты, возможно, попробуйте установить активный вид в onResume() методе фрагмента
  • onCreateView() метод фрагмента вызывается только один раз. This will be called between onCreate(Bundle) and onActivityCreated(Bundle).
Смежные вопросы