我该如何处理在Android的另一个类视图? [英] How do I manipulate a View from another class in Android?

查看:202
本文介绍了我该如何处理在Android的另一个类视图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个处理程序在一个单独的类接收短信,我怎么能做出在处理器执行时,它改变视图元素?

i have a handler for receiving SMS in a seperate class, how can i make it change the view elements when the handler is executed?

这是我的code:

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();

}


}
}

下面是SMS接收器类

 public class SmsReceiver extends BroadcastReceiver {

MapView mapView;
MapController mc;
GeoPoint p;
private int carNumber;
private String langt;
private String longt;
CheckedTextView text;


public SmsReceiver(MapView mapView)
{
    this.mapView = mapView;
}
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";

@SuppressLint("NewApi") @Override
public void onReceive(final Context context, final Intent intent) {

    if (intent != null && SMS_RECEIVED.equals(intent.getAction())) {
        final SmsMessage smsMessage = extractSmsMessage(intent);
        processMessage(context, smsMessage);
    }

}

@SuppressLint("NewApi") private SmsMessage extractSmsMessage(final Intent intent) {

    final Bundle pudsBundle = intent.getExtras();
    final Object[] pdus = (Object[]) pudsBundle.get("pdus");
    final SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[0]);

    return smsMessage;

 }


}

我要修改SMSReceiver类中的地图视图。

I want to modify the map view inside the SMSReceiver class.

感谢您。

推荐答案

定义一个接口,并使用一个回调,让活动知道短信已收到。

Define an interface and use a callback to let the activity know that an SMS has been received.

public Interface SmsReceivedListener {
    void onSmsReceived(int arg1, string arg2); ..<----add arguments you want to pass back
}

在您的短信类

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
}

所有的记忆,所以请原谅错别字,你应该通过增加removeSmsReceivedistener并检查你不setSmsReceivedistener添加相同的侦听器两次提高了短信类。

All from memory so please excuse typos and you should improve the SMS class by adding removeSmsReceivedistener and checking that you do not add the same listener twice in setSmsReceivedistener.

请注意。因为你用一个接口,任何类(不只是一个活动)可以实现它,所以你可以在你的应用的任何更新。该smsReceiver类并不知道也不关心。它只是调用监听器,如果有任何注册。

Note. Because you use an interface, any class (not just an Activity) can implement it so you can update anywhere in your app. The smsReceiver class doesn't know or care. It just calls the listeners, if any are registered.

这篇关于我该如何处理在Android的另一个类视图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆