Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android中操纵另一个类的视图?_Android_Android Layout_Android View - Fatal编程技术网

如何在Android中操纵另一个类的视图?

如何在Android中操纵另一个类的视图?,android,android-layout,android-view,Android,Android Layout,Android View,我有一个在单独的类中接收SMS的处理程序。如何使其在执行处理程序时更改视图元素 这是我的密码: public class MainActivity extends MapActivity { MapView mapView; MapController mc; GeoPoint p; private int carNumber; private String langt; private String longt; CheckedTextV

我有一个在单独的类中接收SMS的处理程序。如何使其在执行处理程序时更改视图元素

这是我的密码:

public class MainActivity extends MapActivity {
    MapView mapView;
    MapController mc;
    GeoPoint p;
    private int carNumber;
    private String langt;
    private String longt;
    CheckedTextView text;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SmsReceiver smsreceiver = new SmsReceiver();
                draw();
    }

    public void draw() {
        mapView = (MapView) findViewById(R.id.mapView);
        LinearLayout zoomLayout = (LinearLayout) findViewById(R.id.zoom);
        @SuppressWarnings("deprecation")
        View zoomView = mapView.getZoomControls();

        zoomLayout.addView(zoomView, new LinearLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        mapView.displayZoomControls(true);
        mc = mapView.getController();

        double lat = Double.parseDouble("31.977185185185185");
        double lng = Double.parseDouble("35.205925925925925");

        p = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));

        mc.animateTo(p);
        mc.setZoom(17);
        MapOverlay mapOverlay = new MapOverlay();
        List<Overlay> listOfOverlays = mapView.getOverlays();
        listOfOverlays.clear();
        listOfOverlays.add(mapOverlay);

        mapView.invalidate();
    }
}
}
我想在
SmsReceiver
类中修改
MapView

谢谢。

将此添加到onReceive()方法中:


定义接口并使用回调让活动知道已收到SMS

public Interface SmsReceivedListener {
    void onSmsReceived(int arg1, string arg2); ..<----add arguments you want to pass back
}
在您的活动中:

public class MainActivity extends MapActivity implements SmsReceivedListener {

...

@Override
public void onCreate(Bundle savedInstanceState) 
{
    ...
    smsReceiver.setSmsReceivedistener(this);
    ...
}

public void onSmsReceived(int arg1, string arg2){
   // do whatever you need to do
}
所有这些都来自内存,因此请原谅输入错误,您应该通过添加RemoveSMReceiveDistener并检查是否在SetSMReceiveDistener中两次添加相同的侦听器来改进SMS类

注意。因为你使用一个接口,所以任何类(不仅仅是一个活动)都可以实现它,这样你就可以在应用程序中的任何地方进行更新。smsReceiver类不知道也不关心。它只调用已注册的侦听器。

试试这个

TextView bt1 =m_activity.findViewById(R.id.textview1);
在上面的示例中,视图bt1来自另一个类。您可以通过使用类实例访问bt1并获取id。现在,对bt1实例执行您想要执行的操作


注意:确保bt1在另一个类中是公共的

听起来不错,但我有一个问题,当我第一次传递侦听器时,它不是空的,但是当调用Onreceive处理程序时,侦听器结果是空的,这怎么可能呢?亲爱的Simon,代码在这个链接中
ArrayList<SmsReceivedistener> listeners = new ArrayList<SmsReceivedistener>();

...

public void setSmsReceivedistener(SmsReceivedistenerlistener){
    listeners.add(listener);
}
for (SmsReceivedistener listener:listeners){
   listener.onSmsReceived(arg1, arg2);
}
public class MainActivity extends MapActivity implements SmsReceivedListener {

...

@Override
public void onCreate(Bundle savedInstanceState) 
{
    ...
    smsReceiver.setSmsReceivedistener(this);
    ...
}

public void onSmsReceived(int arg1, string arg2){
   // do whatever you need to do
}
TextView bt1 =m_activity.findViewById(R.id.textview1);