среда, 11 мая 2011 г.

Android: список операций для элемента списка

Часто в Android-приложении приходится решать одну и ту же задачу: вывести список и дать возможность пользователю выполнить набор действий с каждым элементом этого списка. На днях задался целью сделать для себя универсальное решение.

Принцип работы списка будет таким:

  1. Создаём ListView и на событие OnItemClick вешаем слушатель (назовём его, к примеру Operation).
  2. В методе обработчике слушателя строим диалоговое окно со списком операций. Список операций в виде String[] и заголовок окна передаём в Operation при вызове конструктора слушателя. 
  3. На событие клика по названию операции в диалоговом окне вешаем этот же слушатель. Для этого наш класс Operation должен реализовывать не только интерфейс OnItemClickListener но и DialogInterface.OnClickListener. 
  4. Во втором методе-обработчике (onClick) выполняем операцию над выбранным элементом нашего ListView. Для этого объект выбранного элемента нужно получить в первом методе-обработчике (onItemClick) и передать во второй конструктор Operation. 
Схема может показаться запутанной, но исходник, приведенный ниже, думаю, поможет разобраться:

  1. import android.app.Activity;
  2. import android.app.AlertDialog;
  3. import android.content.DialogInterface;
  4. import android.view.View;
  5. import android.widget.AdapterView;
  6. import android.widget.AdapterView.OnItemClickListener;
  7.  
  8. public class Operation implements DialogInterface.OnClickListener, OnItemClickListener {
  9.   
  10.   private Activity act;
  11.   private Object obj;
  12.   private String title;
  13.   private String[] oper_list;
  14.  
  15.   public Operation(Activity act, String title, String[] oper_list) {
  16.     this.act = act;
  17.     this.title = title;
  18.     this.oper_list = oper_list;
  19.   }
  20.  
  21.   public Operation(Activity act, Object obj) {
  22.     this.act = act;
  23.     this.obj = obj;
  24.   }
  25.   
  26.   public void onClick(DialogInterface di, int i) {
  27.     if (i==0) {
  28.       // TODO: first oheration with obj
  29.     }
  30.     // TODO: next operations with obj
  31.   }
  32.  
  33.   public void onItemClick(AdapterView<?> av, View view, int i, long l) {
  34.     Object curr = av.getItemAtPosition(i);
  35.     AlertDialog.Builder builder = new AlertDialog.Builder(act);
  36.     builder.setTitle(title);
  37.     builder.setItems(oper_list, new Operation(act, curr));
  38.     AlertDialog alert = builder.create();
  39.     alert.show();
  40.   }
  41. }
А в том месте, где нужно построить список поступаем просто:
    ListView lw = new ListView(this);
    String[] operations = {"Edit", "Delete"};
    lw.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, items));
    lw.setOnItemClickListener(new Operation(this, "Operations", operations));

Комментариев нет:

Отправить комментарий