2016-09-28 1 views
1

私のアプリでは、ユーザーが入力時にフィルタリングできる検索ボックスがあります。なんらかの理由で、フィルタリングの実行中にInfinteProgressを正しく表示することができません。 はここに私のコードです:このバージョンでコンテナセットのCodenameOneフィルタの最適化

パス1

public void renderForumList(){ 
     try{ 
      magnify = mStateMachine.findForumSearchIcon(form); 
     }catch(NullPointerException ex){ 
      System.out.println("User typed additional character in search term before previous term finished executing"); 
     } 
     InfiniteProgress infi = new InfiniteProgress(); 
     magnify.getParent().replace(magnify, infi, null); 
     Display.getInstance().invokeAndBlock(new Runnable() { 
      @Override 
      public void run() { 
       for (int i = 0;i < containerStates.length;i++){ 
        if(containerStates[i] != listItems[i].isVisible()){ 
         listItems[i].setHidden(!containerStates[i]); 
         listItems[i].setVisible(containerStates[i]); 
        } 
       } 
       Display.getInstance().callSerially(new Runnable() { 
        @Override 
        public void run() { 
        mStateMachine.findForumsListComponent(form).animateLayout(200); 
        mStateMachine.findContainer2(form).replace(infi, magnify, null); 
        } 
       }); 
      } 
     }); 
} 

、無限の進歩が適切な位置に現れるが、それは回転しません。このバージョンで

パス2

public void renderForumList(){ 
     try{ 
      magnify = mStateMachine.findForumSearchIcon(form); 
     }catch(NullPointerException ex){ 
      System.out.println("User typed additional character in search term before previous term finished executing"); 
     } 
     InfiniteProgress infi = new InfiniteProgress(); 
     magnify.getParent().replace(magnify, infi, null); 
       for (int i = 0;i < containerStates.length;i++){ 
        if(containerStates[i] != listItems[i].isVisible()){ 
         listItems[i].setHidden(!containerStates[i]); 
         listItems[i].setVisible(containerStates[i]); 
        } 
       } 
     mStateMachine.findForumsListComponent(form).animateLayout(200); 
     mStateMachine.findContainer2(form).replace(infi, magnify, null); 
        } 
      } 
} 

、拡大鏡アイコンだけで簡単に点滅しますが、InfiniteProgressスピナーが見えることはありません。

私はシミュレータとAndroidデバイスで同じ結果を得ています。

検索中にInfiniteProgressを回転させるにはどうすればよいですか?

答えて

0

invokeAndBlockは、新しいスレッドを開き、別のスレッドでUIコンポーネントにアクセスするときにEDTに違反します。

次のコードを次のEDTサイクルに延期する代わりに、callSeriallyを使用してみてください。しかし、EDTですべてがまだ起きているようには分かりません。

また、isVisibleに時間がかかると推測しているので、そのコールを単独でinvokeAndBlockに囲むことができます。私は右のあなたを理解していれば

開発者ガイドhttps://www.codenameone.com/manual/edt.html

+0

invokeAndBlockチェックアウトを理解するために、UIのレンダリング中に 'InfiniteProgress'を表示する方法はありませんか?あれは正しいですか? – ygesher

+0

いいえ、それは私が言ったことではありません...私はUIコンポーネントへのアクセスはEDTで行うべきだと私は言った。 EDTの他のもの。 EDTの章を読むことをお勧めします。 –