繁体   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