2017-05-04 79 views
-1

我需要做好以下一些要點:安卓:在多個活動更新textviews

  • 允許的活動說,我有10/20(數字並不重要)。
  • 這些活動中的每一個都有一個應該像計數器一樣工作的textview。
  • 每個這些活動都有一個按鈕可以進入下一個活動。
  • 這個計數器在應用程序啓動時開始,並且每秒增加一次。

因此,我所做到目前爲止是:

  • 在我的主要活動是實例化繼承Thread類的方法。
  • 在run()方法的那個類中,我在第二次通過時增加一個變量。

現在我被困在接下來應該做的事情上。任何指針,將不勝感激。

編輯:我需要一種方法來從run方法內部進行通信,到當前正在屏幕上的任何活動,以更新其textview。

+0

您可以使用共享首選項或使用'intent.putExtra()'方法將此號碼傳遞給每個活動。 –

回答

0

作出這樣的TextView在第二類爲

public static Textview text; 

,並調用它的主要活動爲

SecondActivity obj=new SecondActivity(); 
    obj.text.settext(""); 
+0

這是太多的耦合; – Eenvincible

0

您可以創建例如彼此活動BaseActivity使用Activity類進行擴展,所有10/20活動都使用創建的BaseActivity類進行擴展。

您可以使用您的textview和protected訪問說明符。

1

只是有點理論在這裏爲標準Object Oriented Programming:堅持原則,推薦喜歡鬆耦合這使得你的項目代碼較少依賴於對方。您可以稍後閱讀更多內容。

現在,使用Events,您可以設置與自然Publisher/Subscriber設計模式同義的系統。就像這樣:

需要notify其他活動的活動被稱爲Publisher和需要是notified其他活動被稱爲Subscribers

從這裏:

目前已經建立和測試庫做活動在android系統。像我最喜歡的EventBus

步驟1此行添加到您的app-level build.gradle文件:

compile 'org.greenrobot:eventbus:3.0.0' 

然後創建一個簡單的Plain Old Java Object又名POJO類是這樣的:

public class UpdateTextViewEvent{ 
    private String textToShow; 

    public UpdateTextViewEvent(String text){ 
     this.textToShow = text; 
    } 

    //add your public getters and setters here 
} 

步驟2通知其他人:

當你想通知任何人的變化,只需調用此方法:

EventBus.getDefault().post(new UpdateTextViewEvent("Some new Text")); 

步驟3收到通知

對於那些誰希望收到此事件,簡單地做到這一點:

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

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

注意:實際處理事件:

@Subscribe 
public void onEvent(UpdateTextViewEvent event){ 

    String text = event.getTextToShow(); 

    //now you can show by setting accordingly on the TextView; 

} 

這很容易做到,通過在您的不同活動中刪除static引用來解耦您的代碼

我希望這有助於!祝你好運!

0

你需要做的是在櫃檯類內部,創建一個方法並傳入TextView作爲參數。然後創建一個int變量,並設置計數器作爲實例:

喜歡這個

public static class Counter extends Thread{ 
     private static int x; 
     @Override 
     public void run(){ 
      x = counter; 
     } 

     public void setCounter(TextView tv){ 
      tv.setText(String.valueOf(x)); 
     } 
    } 

現在調用此方法setCounter(TextView)中的所有活動的onCreate()方法你要顯示的計數器,並通過您的佈局TextView作爲參數。像這樣

... 
@Override 
public void onCreate(Bundle savedInstanceState){ 
super.onCreate(savedInstanceState): 
.... 
TextView cTextView = (TextView)findViewById(R.id.texT1); 
Counter c = new Counter(); 
c.setCounter(cTextView); 
}