Как обновить экран при смене фокуса в Blackberry - PullRequest
0 голосов
/ 20 декабря 2011

Я занимаюсь разработкой на Blackberry OS4.5, и у меня есть вопрос о «Обновить экран при смене фокуса»

private void drawImageScrollView(Vector vImages) {
    // Horizontal Field
    HorizontalFieldManager imgScrollView = new HorizontalFieldManager(
            USE_ALL_WIDTH | HORIZONTAL_SCROLL);
    SimpleItemData itemData = new SimpleItemData();
    // Get list bitmap 
    for (int i = 0; i < vImages.size(); i++) {
        itemData = (SimpleItemData) vImages.elementAt(i);
        BitmapField bmf = new BitmapField(itemData.getImage(), BitmapField.ACTION_INVOKE | BitmapField.FOCUSABLE) {
            protected void drawFocus(Graphics graphics, boolean on) {
                graphics.setColor(Color.BLUE);
                graphics.drawRect(0, 0, getWidth() - 4, getHeight() - 4);
                graphics.drawRect(1, 1, getWidth() - 6, getHeight() - 6);

            }
            // When focus on image display new information
            protected void onFocus(int direction) {
                // Change focus and add processing here
                super.onFocus(direction);
            }

        };
        bmf.setPadding(2, 2, 2, 2);
        bmf.setMargin(2, 2, 2, 2);
        imgScrollView.add(bmf);
    }
    add(imgScrollView);
}

Как и в приведенном выше исходном коде, вы можете увидеть метод "onFocus". Я хочу получить новые данные и обновить экран здесь, но я не знаю, какой метод может обновить текущий экран? Я попробовал какой-то метод, такой как: doPaint (), invalidate (), ... но не работает @@ У меня нет решения этой проблемы. Пожалуйста, помогите мне, если вы можете ...

Спасибо большое !!!

1 Ответ

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

Для этой цели лучше использовать FocusChangeListner, соблюдайте следующий пример, он поможет вам как обновить поле и перезагрузить указанное поле (в моем случае я взял одну метку)

например, когда я фокусируюсь на изображениив моем Imagescroll внизу должен отображаться его номер.

Примечание: перед тестированием этого примера, пожалуйста, загрузите изображения отсюда http://developer.android.com/resources/tutorials/views/hello-gridview.html его легко протестировать, и вы должны изменить изображения в соответствии с вашим проектом

 public class StartUp extends UiApplication
{

    public static void main(String[] args) {
        StartUp start=new StartUp();
        start.enterEventDispatcher();
    }
    public StartUp() 
    {
        UiApplication.getUiApplication().pushScreen(new RefreshSCreen());

    }
}

    class RefreshSCreen extends MainScreen implements FocusChangeListener
    {
        HorizontalFieldManager imgScrollView;
        VerticalFieldManager vmanager;
        LabelField lable;
        BitmapField bmf[];
        private Vector vImages=null;
        public RefreshSCreen() {
            vImages=new Vector();
            for(int i=0;i<8;i++){
                Bitmap image=Bitmap.getBitmapResource("sample_"+i+".jpg");
                vImages.addElement(image);
            }
             imgScrollView = new HorizontalFieldManager(
                        USE_ALL_WIDTH | HORIZONTAL_SCROLL);

                // Get list bitmap 
             bmf=new BitmapField[vImages.size()];
                for (int i = 0; i < vImages.size(); i++) {

                    bmf[i] = new BitmapField((Bitmap) vImages.elementAt(i), BitmapField.ACTION_INVOKE | BitmapField.FOCUSABLE) {
                        protected void drawFocus(Graphics graphics, boolean on) {
                            graphics.setColor(Color.BLUE);
                            graphics.drawRect(0, 0, getWidth() - 4, getHeight() - 4);
                            graphics.drawRect(1, 1, getWidth() - 6, getHeight() - 6);

                        }
                    };
                    bmf[i].setFocusListener(this);
                    bmf[i].setPadding(2, 2, 2, 2);
                    bmf[i].setMargin(2, 2, 2, 2);
                    imgScrollView.add(bmf[i]);
                }
                add(imgScrollView);
                vmanager=new VerticalFieldManager();
                add(vmanager);


        }

        public void focusChanged(Field field, int eventType) {

            for(int i=0;i<vImages.size();i++){
                if(field==bmf[i]){
                    if(bmf[i].isFocus()){
                        synchronized (UiApplication.getEventLock()) {
                            vmanager.deleteAll();
                            vmanager.invalidate();
                            lable=new LabelField("Hi I am reference of Image number "+i);
                            vmanager.add(lable);
                        }
                    }
                }
            }
        }
    }
...