CharSequence c, int start, int count, int after) {
// Здесь намеренно оставлено пустое место
}
public void afterTextChanged(Editable c) {
// И здесь тоже
}
});
return v;
}
}
Отримання посилань в Fragment.onCreateView(.) відбувається практично так само, як в Activity.onCreate(.). Єдина відмінність полягає в тому, що для представлення фрагмента викликається метод View.findViewById(int). Метод Activity. findViewById(int), який ми використали раніше, є допоміжним методом, який викликає View.findViewById(int) у своїй внутрішній реалізації. У класу Fragment аналогічного допоміжного методу немає, тому доводиться викликати основний метод.
Призначення слухачів у фрагменті працює точно так, як і в активності. У лістингу 7.9 ми створюємо анонімний клас, який реалізує інтерфейс слухача TextWatcher. Цей інтерфейс містить три методи, але нас цікавить тільки один:
onTextChanged(.).
У методі onTextChanged(.) ми викликаємо toString() для об'єкту CharSequence, користувача, що представляє введення. Цей метод повертає рядок, який потім використовується для завдання заголовка Crime.
Код CrimeFragment готовий. Було б чудово, якби ви могли запустити CriminalIntent і поекспериментувати з написаним кодом. На жаль, це неможливо — фрагменти не можуть виводити свої представлення на екран.
Щоб реалізувати задумане, необхідно спочатку додати CrimeFragment
у CrimeActivity.
Додавання UI- фрагмента в FragmentManager
Коли в Honeycomb з'явився клас Fragment, в клас Activity були внесені зміни: в нього був доданий компонент, званий FragmentManager. Він відповідає за управління фрагментами і додавання їх представлень в ієрархію представлень активності.
FragmentManager управляє двома структурами: списком фрагментів і стеком транзакцій фрагментів(про яке я незабаром розповім).
Стек транзакцій Фрагменти
Мал. 7.16. FragmentManager
У додатку CriminalIntent нас цікавить тільки список фрагментів Fragment - Manager.
Щоб додати фрагмент в активність в коде, слід звернутися з викликом до об'єкту FragmentManager активності.
Передусім необхідно отримати сам об'єкт FragmentManager. У CrimeActivity.java включите наступний код в onCreate(.).
Лістинг 7.10. Отримання об'єкту FragmentManager(CrimeActivity.java)
public class CrimeActivity extends FragmentActivity {
/** Викликається при створенні активності. */
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity _ crime);
FragmentManager fm = getSupportFragmentManager();
}
}
Ми викликаємо getSupportFragmentManager(), тому що в додатку використовується бібліотека підтримка і клас FragmentActivity. Якби нас не цікавила сумісність з пристроями, попередніми Honeycomb, то замість цього можна було б субклассировать Activity і викликати getFragmentManager().
Транзакції фрагментів
Після отримання об'єкту FragmentManager додайте наступний код, який передає йому фрагмент для управління. (Пізніше ми розглянемо цей код детальніше, а доки просто включите його в додаток.)