2016-03-28 9 views
0

ビューがOnCreateViewまたはOnCreateで返された後に、UIを変更するメソッドを呼び出すことはできますか?他のアクティビティからの非同期タスク内のロードが完了するまで、Progress Viewを表示してリストビューを非表示にしたい。しかし、いつでも私は、このコードでフラグメントを開い:ナビゲーションメニューからonCreateView()の後にUIを変更するメソッドを呼び出す?

boolean doneOnce = false; 
    do { 
     if(!doneOnce) { 
      showProg(true); 
      doneOnce = true; 
     } 
    }while (Values.courses == null); 

OnCreateViewが膨張したビューを返す前に、これが呼び出されているので、それは、フリーズして、ポップアップ表示されます。どんな解決策ですか?

+0

「私は進捗状況ビューを表示し、何かが別のアクティビティから非同期タスク内のロードが終了するまで、リストビューを非表示にする」 - その後、両方のレイアウトを持っていると、それぞれの表示を切り替える( 'GONE'からに「VISIBLE」またはその逆)。 "しかし、このコードでフラグメントを開くたびに、" - ビジーなループは決してAndroidでのGUI関連の仕事の正解ではなく、ソフトウェアエンジニアリングのどこでも正しい答えとなることはほとんどありません。 – CommonsWare

答えて

0

このようなループはUIをブロックします。あなたのタスクに必要な可視性の変更を加えたRunnableの使い方はどうですか?ような何か:

class MyRunnable implements Runnable { 
    @Override 
    public void run() { 
     //perform your task here 
     something.setVisibility(View.VISIBLE); 
    } 
} 

とを通じて、この実行可能なポスト:

private android.os.Handler mHandler= new android.os.Handler(); 
mHandler.post(new MyRunnable()); 

EDIT:おそらく、あなたはまだ実行可能を使用しますが、あなたのメインの活動からすることができます。

boolean doneOnce = false; 

class MyRunnable implements Runnable { 
    @Override 
    public void run() { 
     if(!doneOnce) { 
      showProg(true); 
      doneOnce = true; 
     } 
     if (Values.courses == null) { 
      mHandler.postdelayed(this, 100); //or mHandler.post(this); 
     } 
    } 
}  
+0

この回答ありがとうございますが、タスクは別のアクティビティのasynctaskで開始されますが、そのアクティビティの外で実行されたかどうかを確認するにはどうしてですか?このタスクでは、静的変数Values.coursesを何かに設定していますので、(Values.courses == null)whileを進捗表示します。それを行う方法はありますか? – Engima

関連する問題