2016-11-09 7 views
0

は、すべてのテキストビューを更新/更新する方法を理解できません。彼らは13の異なった部分に位置しています。単純なJavaでmainActivityのすべてのフラグメントのAndroid Refresh TextView

私はシンプルgameloop

//Game Loop 
      boolean GameLoop = true; 
      while(GameLoop){ 
      CG.refresh(); 
      }  

を持って、メインクラスでは、私はこのようなものだ:

void refresh() {    
    Labels.MoneyLabel.setText("Money: " + CarMain.main[0]); 
    Labels.BoxesLabel.setText("Boxes: " + CarMain.main[2]); 

}

をし、それすべてが働きました。 Androidではテキストビューを更新できません。 Androidの上で

は、のonCreateメソッドはTextviews becouseあり、簡単なゲームループ

 Thread t = new Thread() { 

     @Override 
     public void run() { 
      try { 
       while (!isInterrupted()) { 
        Thread.sleep(1000); 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          Collections(); 
          SaveFile(); 
          Refresh(); 
         } 
        }); 
       } 
      } catch (InterruptedException e) { 
      } 
     } 
    }; 

    t.start(); 

を作り、

ます。public voidリフレッシュ(){

TextView MoneyTXT = (TextView) rootView.findViewById(R.id.MoneyText); 
      MoneyTXT.setText("Money: " + Main.Money[0]); 
      TextView MoneyPerTapTXT = (TextView) rootView.findViewById(R.id.MoneyPerTapTView); 
      MoneyPerTapTXT.setText("$ " + Main.Money[1] + " per tap"); 
       TextView BoxesTXT = (TextView) rootView.findViewById(R.id.BoxesText); 
       BoxesTXT.setText("Boxes: " + Main.Boxes[0]); 
       TextView BoxesPerTapTXT = (TextView) rootView.findViewById(R.id.BoxesPerTapTView); 
       BoxesPerTapTXT.setText("Points " + Main.Boxes[1] + " per tap"); 

} 

ようtextviewsをリフレッシュしたかったが、エラーが発生しました異なるレイアウトに配置されています。 Activityからフラグメントを更新するには

+0

フラグメント?それらはすべて一度に表示されていますか?一度に13個のフラグメントを更新していると、おそらく何か間違っているようです。 –

+0

@ nt-completeいいえ、一度にではなく、私はちょうどそれらの1つをリフレッシュする方法を知りません。それは開かれている。私はちょうどそれらにアクセスする方法を知りたい。 – MsCrelix

+0

@ nt-complete簡単な例です。 Got Integer =クリック数。ボタンをクリックするとクリック数が増えます。テキストビューはクリック時に更新する必要があります。私はクリックでtextviewを更新したいと思ったが、クリックすることはできない。mainActivityとlayoutviewのtextviewにあるメソッドをクリックする – MsCrelix

答えて

0

あなたのフラグメントにid R.id.frameをビューに追加されたと仮定すると、あなたはどうなる:

// Get current Fragment 
Fragment fragment = getFragmentManager().findFragmentById(R.id.frame); 
if (fragment instanceof MyFragment) { //or whatever your Fragment's name is 
    ((MyFragment) fragment).updateTextView(); // This is a method you will have to define yourself 
} 

ん意味をなさない?

0

viaメソッドのコールバックメカニズムを処理したくない場合は、GreenRobot EventBusのようなサードパーティライブラリを使用してイベントコールバックメカニズムを試すことができます。

簡単な例、

定義イベント: 宣言して、サブスクライブ法に注釈を付け、必要に応じてスレッドモードを指定します(イベントを受け取るためにあなたの活動を購読):

public static class MessageEvent { /* Additional fields if needed */ } 

は、加入者を準備します。

@Subscribe(threadMode = ThreadMode.MAIN) 
public void onMessageEvent(MessageEvent event) {/* Do something */}; 

サブスクライバを登録および登録解除します。 Android上でたとえば、活動およびフラグメントは、通常、そのライフサイクルに応じて登録する必要があります:

@Override 
public void onStart() { 
    super.onStart(); 
    EventBus.getDefault().register(this); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    EventBus.getDefault().unregister(this); 
} 

ポストイベント:(フラグメントボタンのクリックでイベントをポスト、活動がすぐに通知されます)

EventBus.getDefault().post(new MessageEvent()); 
関連する問題