문제

내 응용 프로그램에는 많은 이미지가 포함되어 있습니다. 따라서 응용 프로그램을로드하는 데 시간이 걸립니다. 응용 프로그램이로드 될 때까지 로딩 화면을 표시하고 싶습니다. 그게 어떻게 가능해 ?

도움이 되었습니까?

해결책

다음은 여러분이 원하는 골격의 예제 앱입니다. 기본적으로 푸시하는 초기 화면은 로딩 화면입니다. 초기 시작 시퀀스 중에 새 스레드를 회전시키고로드 작업을 수행 한 다음 invokelater를 사용하여 1) 이벤트 디스패처에서 2) 새 화면을 푸시하려면 또는이 예제의 경우 a. 대화 상자 - 화면에 사용자가로드 화면에서 멀어지게합니다.

코드는 다음과 같습니다.

import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.LabelField;

/**
 * Just a test app.
 */
public class TestAppMain extends UiApplication 
{
    /**
     * Default Constructor.
     */
    private TestAppMain() {                
        pushScreen(new AppScreen(this));        
    }

    /**
     * App entry point.
     * @param args Arguments.
     */
    public static void main(String[] args) {
        TestAppMain app = new TestAppMain();                       
        app.enterEventDispatcher();
    }

    /**
     * Main application screen.
     */
    private static class AppScreen extends MainScreen 
    {
        UiApplication _app;

        /**
         * Default constructor.
         */
        public AppScreen(UiApplication app) {
            // Note: This screen just says "Loading...", but you could
            // add a loading animation.
            _app = app;
            LabelField title = new LabelField("App Name",
                    LabelField.ELLIPSIS | LabelField.USE_ALL_WIDTH);
            setTitle(title);

            LabelField loading = new LabelField("Loading...",
                    LabelField.ELLIPSIS | LabelField.USE_ALL_WIDTH);

            add(loading);

            // Queue up the loading process.
            startLoading();
        }               

        /**
         * Create the loading thread. Make sure to invoke later as you will
         * need to push a screen or show a dialog after the loading is complete, eventhough
         * you are creating the thread before the app is in the event dispatcher.
         */
        public void startLoading() { 
            Thread loadThread = new Thread() {
                public void run() {
                    // Make sure to invokeLater to avoid problems with the event thread.
                    try{ 
                        // Simulate loading time
                        Thread.sleep(5000);
                    } catch(java.lang.InterruptedException e){}

                    // TODO - Add loading logic here.

                    _app.invokeLater( new Runnable() {                
                        public void run() {                    
                            // This represents the next step after loading. This just shows 
                            // a dialog, but you could push the applications main menu screen.
                            Dialog.alert("Load Complete");
                        }
                    });
                }
            };
            loadThread.start();
        }
    }
}

다른 팁

                HorizontalFieldManager popHF = new HorizontalFieldManager();
                popHF.add(new CustomLabelField("Pls wait..."));
                final PopupScreen waitScreen = new PopupScreen(popHF);
                new Thread()
                {
                    public void run() 
                    {

                        synchronized (UiApplication.getEventLock()) 
                        {
                            UiApplication.getUiApplication().pushScreen(waitScreen);
                        }
                       //Here Some Network Call 

                       synchronized (UiApplication.getEventLock()) 
                        {
                            UiApplication.getUiApplication().popScreen(waitScreen);
                        }
                     }
                 }.start();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top