簡體   English   中英

Android:在多個活動中更新文本視圖

[英]Android: Updating textviews in multiple activities

我需要一些關於執行以下操作的指示:

  • 假設我有 10/20(數量無關緊要)的活動。
  • 這些活動中的每一個都有一個應該像計數器一樣工作的文本視圖。
  • 這些活動中的每一個都有一個按鈕,可以轉到下一個活動。
  • 這個計數器在應用程序啟動時開始,每秒遞增一次。

所以到目前為止我所做的是:

  • 在我的主要活動中有一個方法來實例化一個擴展線程的類。
  • 在 run() 方法的那個類中,當一秒過去時,我增加一個變量。

現在我被困在我接下來應該做什么上。 任何指針將不勝感激,謝謝。

編輯:我需要一種從 run 方法內部通信到當前屏幕上的任何活動的方法,以更新其文本視圖。

這里只是一些標准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 aka 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引用來解耦代碼

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

使該 Textview 在第二類中作為

  public static Textview text;

並在主要活動中將其稱為

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

您可以創建另一個活動,例如 BaseActivity 使用 Activity 類擴展,並且您的所有 10/20 活動都使用創建的 BaseActivity 類擴展。

您可以將 textview 與protected訪問說明符一起使用。

您需要做的是在計數器類中,創建一個方法並傳入一個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));
        }
    }

現在,在您希望顯示計數器的所有活動的onCreate()方法中調用此方法setCounter(TextView) ,並將布局 TextView 作為參數傳遞。 像這樣

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM