黑莓加载屏幕:按下后退到加载屏幕

时间:2012-01-17 01:07:02

标签: blackberry

这是我的uiapplication类:

public class HelloWorld extends UiApplication {

    public HelloWorld(){

            pushScreen(new LoadingScreen());
            Ui.getUiEngineInstance().setAcceptableDirections(Display.DIRECTION_PORTRAIT);
        }
        public static void main(String[] args){
            HelloWorld theapp = new HelloWorld();
            theapp.enterEventDispatcher();
        }


    }

loadingScreen类:

 public class LoadingScreen extends CustomMainScreen {


        public LoadingScreen(){

            Bitmap tcalogo = Bitmap.getBitmapResource("loading_360.png");
            BitmapField tcalogoField = new BitmapField(tcalogo);

            add(tcalogoField);

            startLoading();

        }


        public void startLoading(){

            ConsumeFactoryThread consumption = new ConsumeFactoryThread("http://example.com",this); //add arguments of url and scope
            consumption.start();
        }

        public void onFinish(JSONArray array){ //method that executes when the json is retrieved
            UiApplication.getUiApplication().pushScreen(new FeaturedScreen(array));
        }

    }

我按下一个装载屏幕,打开一个线程,下载json,然后在loadingScreen方法中运行onFinish方法,并用检索到的信息推送一个新屏幕。它工作,线程/下载不是我的问题,但它是用户按下并返回到loadingScreen的能力。我采用这种方式从堆栈中加载,但我不确定它是否是“正确”的方式。

如何使用loadingScreen一次?

1 个答案:

答案 0 :(得分:3)

从代码的外观来看,您正在推动加载屏幕,然后通过onFinish方法将精选屏幕推送到堆栈。

使用后退键,它将循环显示已被推入堆栈的屏幕。

我建议使用尝试:

public void onFinish(JSONArray array) { 
            UiApplication.getUiApplication()
                   .pushScreen(new FeaturedScreen(array));
            try {
                   UiApplication.getUiApplication().popScreen(this);
            } catch(IllegalArgumentException e) {
                   //somehow the screen isn't on the stack
                   //Do nothing.
            }
}

这应该从堆栈中删除LoadingScreen,这样当你按下它时,它就不再进入这个屏幕了。