簡體   English   中英

在 Android Java 中是否有替代方法用於消息 sendToTarget 以訪問活動內部 class 中的視圖?

[英]Is there an alternative in Android Java for Message sendToTarget to access View in inner class of an activity?

我有一個活動,我有一個文本視圖。 我也在使用一個有一些事件的 sdk。 在這些事件中,我需要在 TextView 上顯示一些數據。 這些事件位於外部 class 中,我通過一些接口獲得了它們。 我在 Activity 中實現的接口。 我正在使用 Handler 和 Message 將文本設置到 TextView 內實現接口。 我想知道除了處理程序和消息之外,是否還有另一種方法可以在界面中設置文本。

這是該代碼:

public class MyActivity extends AppCompatActivity {

    private TextView nameTextView;

    // some code

   
    // implementing interfaces of external class
    Service.ServiceEvents events = new Service.ServiceEvents() {
       
       @Override
       public void onSomeEvent(String name) {
           nameTextView.setText(name); // not working
           Message m = myHandler.obtainMessage(0, nameTextView);
           m.sendToTarget();
       }
       
       Handler myHandler = new Handler(Looper.getMainLooper()) {
          @Override
          public void handleMessage(Message message) {

            String s = message.obj.toString();

            nameTextView.setText(s);

          }
       };
    }

 } // end of activity

是否有另一種方法可以在 TextView 中設置文本? 請幫忙。

您可以使用界面來完成。

如何實施


  • 創建一個新interface並給它一個你喜歡的名字。(這里是SampleInterface )。

  • 添加一些 void 方法來喜歡這個

    void onSomeEvent(String name);
  • 在 class 中創建它的 object,您可以在其中從 sdk 獲取數據,並將此偵聽器添加到其構造函數中。 像這樣的東西

    public YourJavaClassName(SampleInterface sampleInterface) { this.sampleInterface= sampleInterface; }
  • 當您在 sdk 中收到更新時,您可以這樣調用它

    void onDataReceived(String name){// I don't know how you get the value from the sdk so I wrote this sampleInterface.onSomeEvent(name); }

您已在 sdk 接收器 class 中實現它。 現在您需要添加到主要活動以接收和更新數據。

  • 創建 class 的 object,您可以在其中接收來自 sdk 的數據。像這樣

    MySDKReceiverClass mysdkreceiverclass; mysdkreceiverclass = new MySDKReceiverClass(this);
  • 在活動中實現接口,在那里你可以得到值,你可以在 textview 中設置它。

注意:您不需要添加任何可運行或處理程序或任何東西。只要有值更改,就會調用偵聽器並設置值。

暫無
暫無

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

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