2017-07-03 14 views
0

アクティビティでTextViewを更新しようとしていますが、ビューを更新するメソッドは主なアクティビティ(通常の状況)ですが、このメソッドを呼び出すメソッドは別のクラス糸)。アンドロイドビューは別のクラスと別のスレッドから更新されていません

これは、ビューを更新する方法であるが、この方法では、主な活動であり、 は(すべてのログが正しく印刷されていることに注意してください、正しい順序で):それがどこにある

public void getDataFromFiles() { 
    String new_text = JsonReader.readTextData(dataName,activityName, this); 
    Log.i("Loading", "loaded text " + new_text ); 
    if (new_text != null) { 
     TextView introText = (TextView) findViewById(R.id.loading_introTxt); 
     introText.setText(new_text); 
    } 

} 

ですLoadingThreadと呼ばれる別のクラスから呼び出され、それは参照(loadingActivity)を有する:

  activity.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       Log.i("LoadingThread", "Will update loading screen"); 
       loadingActivity.getDataFromFiles(); 

      } 
     }); 

もLoadingThreadクラスは

主な活動から呼び出される方法に注意してください
LoadingThread loadingThread = LoadingThread.getInstance(this); 
    Thread thread = new Thread(loadingThread); 
    loadingThread.setActivity(this); 
    thread.start(); 

メインアクティビティはLoadingThreadを開始します。このアクティビティは、ビューを更新するはずのメインアクティビティで再び呼び出されますが、これは発生しません。もう一度やり直すと、更新情報がそこにあります。

+0

問題がないように、UIスレッドで更新プログラムを実行しています。 introText.invalidate()を追加してみてください。 getDataFromFiles()でテキストを設定した後 – Juan

+0

loading_introTxtの参照をアクティビティに残しておき、役立つかどうか確認できますか? –

+0

@juanいいえ残念ながら – yoyo

答えて

0

私のgetInstance()があるが、それは

LoadingThread loadingThread = LoadingThread.getInstance(this); 
Thread thread = new Thread(loadingThread); 
loadingThread.setActivity(this); 

にあった問題を発見した:

if (instance == null) { 
     instance = new LoadingThread(); 
     instance.loadingActivity = loadingActivity; 

    } 
    return instance; 

閉じてアプリを再開、インスタンスがのでその前のアクティビティを返すnullでない場合読み込みアクティビティの参照が更新されていないため、これ以上変更されていないため、ここにはいません。

if (instance == null) { 
     instance = new LoadingThread(); 
    } 
    instance.loadingActivity = loadingActivity; 
    return instance; 

と今それは動作します!

関連する問題