Java Blackberry Обновить поле - PullRequest
1 голос
/ 17 декабря 2011

У меня есть основной класс и класс экрана.У меня есть кнопка, которая запускает DatePicker.Когда DatePicker закрыт, мне нужно обновить ярлык кнопки с выбранным значением.Как мне это сделать?

Я пытался с помощью invalidate, создавая CustomButtonField, который реализует различные onFocus, onUnFocus и некоторые другие вещи, но я думаю, что я реализовал их неправильно ...

Вот мои два предложения ...

Main ...

public class TestClass extends UiApplication
{
    public static Calendar alarm1time = Calendar.getInstance(TimeZone.getTimeZone("GMT-3"));

    public static void main(String[] args)
    {
        TestClass testClass = new TestClass (); 
        testClass.enterEventDispatcher();
    }

    public TestClass()
    {
        pushScreen(new TestClassScreen());
    }
}

Экран ...

public final class TestClassScreen extends MainScreen
{
    public TestClassScreen()
    {
        ButtonField alarm1 = new ButtonField("Alarm : " + TestClass.alarm1time.get(Calendar.HOUR_OF_DAY) + ":" + TestClass.alarm1time.get(Calendar.MINUTE) ,ButtonField.FOCUSABLE)
        {
            public boolean navigationClick (int status , int time)
            {
                datePicker(1);
                return true;
            }
        };
        setTitle("Test Alarm");
        add(new RichTextField(" "));
        add(alarm1 );
    }

    public void datePicker(final int alarmNumber)
    {
        UiApplication.getUiApplication().invokeLater(new Runnable()
        {
            public void run()
            {
                DateTimePicker datePicker = null;
                datePicker = DateTimePicker.createInstance(TestClass.alarm1time, null, "HH:mm");
                if(datePicker.doModal())
                {
                    Calendar cal = datePicker.getDateTime();
                    TestClass.alarm1time = cal;
                    //Here I need the label to be refreshed, after the datePicker is Ok
                }
            }
        });
    }
}

Ответы [ 2 ]

0 голосов
/ 19 декабря 2011

Я думаю, это поможет вам:

public class Def extends MainScreen
{   
ButtonField show;
LabelField label;
String str="";
ObjectChoiceField choiceField;
public Def() 
{
    createGUI();
}

private void createGUI()
{   
    String st_ar[]={"Date Picker"};
    choiceField=new ObjectChoiceField("Select Date: ", st_ar)
    {
        protected boolean navigationClick(int status, int time) 
        {
            DateTimePicker datePicker = DateTimePicker.createInstance( Calendar.getInstance(), "yyyy-MM-dd", null);
            datePicker.doModal();
            Calendar calendar=datePicker.getDateTime();
            str=String.valueOf(calendar.get(Calendar.DAY_OF_MONTH))+"-"+String.valueOf(calendar.get(Calendar.MONTH)+1)+"-"+calendar.get(Calendar.YEAR);
            return true;
        }
    };
    add(choiceField);       

    label=new LabelField("",Field.NON_FOCUSABLE);
    add(label);

    show=new ButtonField("Show");
    show.setChangeListener(new FieldChangeListener() 
    {
        public void fieldChanged(Field field, int context) 
        {
            label.setText("Time is: "+str);
        }
    });
    add(show);
}
}
0 голосов
/ 18 декабря 2011

Я нашел один путь на форуме по развитию Blackberry ...

public boolean navigationClick (int status , int time)
{
    datePicker(1, this);
    return true;
}

public void datePicker(final int alarmNumber, final ButtonField buttonToUpdate)
{
    UiApplication.getUiApplication().invokeLater(new Runnable()
    {
        public void run()
        {
            DateTimePicker datePicker = null;
            datePicker = DateTimePicker.createInstance(TestClass.alarm1time, null, "HH:mm");
            if(datePicker.doModal())
            {
                Calendar cal = datePicker.getDateTime();
                TestClass.alarm1time = cal;
                buttonToUpdate.setLabel(....)
            }
        }
    });
}

Более обычным способом было бы заставить слушателя смены прослушивать щелчки кнопок и выполнять там аналогичную обработку.

...