Списки в Android бывают простыми (в виде текста или картинок) и более сложные - комбинированные. В этом примере будет рассмотрен сложный список элементов (комбинация текст + изображение, которое использовалось в приложении по выбору эффекта для фотографии ). Для этого нужны два класса : BaseAdapter , который заполняет список данными, и ListActivity который этот список отображает. Любое активити, имеет один layout в момент времени, и его выводит на активное окно. Так как в примере сложный список ( содержит в одной ячейке изображение и текст ) то для такого списка понадобится отдельный layout файл в где будут созданы все нужные элементы (изображения, кнопки, текст и т.д) которые нужно отобразить в одной ячейке. Читать этот layout, и загружать в BaseAdapter будет важный класс - LayoutInflater. BaseAdapter заполняет layout ячейку (в примере это - элементы ImageView, TextView) нужными данными , и возвращает ListActivity, который повторяет эту операцию до вывода всего списка. LayoutInflater может использоваться не только для оформления элемента списка, но также для создания более сложных диалоговых окон чем обычно с одной или двумя кнопками, это такой контейнер который способен перемещать в нужное место для вывода layout файлы.
- public class FilterManager extends ListActivity {
- private FilterManagerAdapter adapter;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.filter_manager_activity);
- adapter = new FilterManagerAdapter(this);
- setListAdapter(adapter);
- }
- public void onListItemClick(
- ListView parent, View v, int position, long id) {
- }
- } }
В классе BaseAdapter эть несколько методов которые вызываются при каждом "рисовании" элемента списка : public int getCount() { return style.length; } - сообщает сколько раз нужно повторить итерацию ( в этом случае ровно столько сколько элементов в массиве - количество фильтров). А getView(int position, View convertView, ViewGroup parent) подставляет нужные изображения и текст и возвращает уже заполненный элемент списка в активность на котором все отображается.
- public class FilterManager extends ListActivity {
- private FilterManagerAdapter adapter;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.filter_manager_activity);
- adapter = new FilterManagerAdapter(this);
- setListAdapter(adapter);
- }
- public void onListItemClick(
- ListView parent, View v, int position, long id) {
- }
- } }
В ListActivity важен метод public void onListItemClick(), в нем сообщается о нажатии на элемент списка
Комментариев нет:
Отправить комментарий