Вы можете использовать instance_variable_set
, вам не нужно полагаться на attr writer:
def initialize(data)
data.each { |key, value| instance_variable_set("@#{key}", value) }
end
Вы, вероятно, хотите посмотреть на использование ObjectListField. Обработка избранного действия сделана посредством содержания Объекта на экране, я сделал это ниже использования MenuItem, я не действительно уверен, как установить избранного слушателя по умолчанию, Вам, вероятно, придется обнаружить ключ и trackwheel события.
Некоторый пример кода для Вас: (не протестированный!)
MainScreen screen = new MainScreen();
screen.setTitle("my test");
final ObjectListField list = new ObjectLIstField();
String[] items = new String[] { "Item 1", "Item 2", "Item 3" };
list.set(items);
screen.addMenuItem(new MenuItem("Select", 100, 1) {
public void run() {
int selectedIndex = list.getSelectedIndex();
String item = (String)list.get(selectedIndex);
// Do someting with item
});
screen.add(list);
Можно переопределить navigationClick метод как это:
ObjectListField list = new ObjectListField()
{
protected boolean navigationClick(int status, int time)
{
// Your implementation here.
}
};
Можно обнаружить щелчок по каждому элементу списка путем переопределения
protected boolean navigationClick(int status,int time)
Затем просто необходимо разработать, что сделать в ответ на щелчок. Путем я сделал это было при помощи анонимного класса, установленного для каждого элемента списка.