2016-11-09 55 views
0

無法理解如何刷新/更新所有文本瀏覽。他們位於13個不同的片段,我無法訪問他們如何我想要的。Android刷新來自mainActivity的所有片段中的TextViews

在簡單的Java我有一個簡單的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方法變得簡單的遊戲循環

 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(); 

,並希望刷新textviews像

公共無效刷新(){

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"); 

} 

,但得到的錯誤,becouse Textviews是位於不同的佈局。

+0

13個片段?他們是否都一次被展示?看起來如果你一次更新13個片段,你可能會做一些不正確的事情。 –

+0

@ nt-complete不,不是一次,我只是不知道如何刷新其中的一個。這是打開的。我只想知道,如何使用它們。 – MsCrelix

+0

@ nt-complete對於簡單的例子。得到整數=點擊。在按鈕上單擊我增加點擊+1;和textview需要點擊更新。我想點擊更新textview,但不能替代,點擊方法是在mainActivity和textview中的佈局片段 – MsCrelix

回答

0

要更新的活動片段:

假設你的碎片已被添加到編號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

如果您不想通過方法回調機制處理,您可以使用第三方庫(如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());