1). Как я могу изменить текст MenuItem? Я бы
нравится отображать / скрывать галочку
символ \ u221A - в зависимости от того, какой
порядок сортировки в настоящее время выбирается
Пользователь. SetText (текст строки)
метод устарел, и я не уверен
как использовать setText (StringProvider
текст)
Вместо использования addMenuItem(myMenu1);
переопределить makeMenu(Menu menu, int instance)
:
protected void makeMenu(Menu menu, int instance) {
super.makeMenu(menu, instance);
// add menu items on-the-fly
// generating their labels in accordance to some conditions
menu.add(new MenuItem("any label", 1, 1) {
public void run() {
// do smth useful
}
});
}
2). После того, как пользователь изменит метод сортировки, выбрав 1 из 2
MenuItems, как мне перерисовать
лежащий в основе KeywordFilterField? Я
попытался вызвать myList.updateList () и
myList.invalidate () - это не помогает.
Попробуйте закомментировать строку myList.setCallback(new MyListFieldCallback());
. Я считаю, что KeywordFilterField
уже реализует этот обратный вызов каким-то особым образом, поэтому, установив свой пользовательский ListFieldCallback
, вы нарушите поведение по умолчанию / ожидаемое поведение.
ОБНОВЛЕНИЕ о пунктах меню:
Полностью избавьтесь от полей private MenuItem alphaMenu
и private MenuItem numMenu
. Создайте эти пункты меню на лету:
protected void makeMenu(Menu menu, int instance) {
super.makeMenu(menu, instance);
String label = "num sort" + (MyItem.NUMERIC_SORT ? " \u221A" : "");
menu.add(new MenuItem(label, 0, 0) {
public void run() {
MyItem.NUMERIC_SORT = true;
Status.show("Use " + toString());
// setText("num sort \u221A");
// alphaMenu.setText("alpha sort");
myList.updateList();
}
});
label = "alpha sort" + (MyItem.NUMERIC_SORT ? "" : " \u221A");
menu.add(new MenuItem(label, 1, 0) {
public void run() {
MyItem.NUMERIC_SORT = false;
Status.show("Use " + toString());
// setText("alpha sort \u221A");
// numMenu.setText("num sort");
myList.updateList();
}
});
}
ОБНОВЛЕНИЕ по основной проблеме:
class MyScreen extends MainScreen {
KeywordFilterField myList = new KeywordFilterField();
MyItemList myItems = new MyItemList();
public MyScreen() {
setTitle(myList.getKeywordField());
myItems.doAdd(new MyItem(1, "Eins"));
myItems.doAdd(new MyItem(2, "Zwei"));
myItems.doAdd(new MyItem(3, "Drei"));
myItems.doAdd(new MyItem(4, "Vier"));
myList.setSourceList(myItems, new MyItem.MyProvider());
// XXX commenting the line below does not help
myList.setCallback(new MyListFieldCallback());
add(myList);
}
protected void makeMenu(Menu menu, int instance) {
super.makeMenu(menu, instance);
String label = "num sort" + (MyItem.NUMERIC_SORT ? " \u221A" : "");
menu.add(new MenuItem(label, 0, 0) {
public void run() {
MyItem.NUMERIC_SORT = true;
Status.show("Use " + toString());
// setText("num sort \u221A");
// alphaMenu.setText("alpha sort");
myItems.setComparator(new MyItem.MyComparator());
myList.updateList();
}
});
label = "alpha sort" + (MyItem.NUMERIC_SORT ? "" : " \u221A");
menu.add(new MenuItem(label, 1, 0) {
public void run() {
MyItem.NUMERIC_SORT = false;
Status.show("Use " + toString());
// setText("alpha sort \u221A");
// numMenu.setText("num sort");
myItems.setComparator(new MyItem.MyComparator());
myList.updateList();
}
});
}
// .. the rest of the code is the same