[8]TabHost在TabHost中子Activity无法接收返回值

问题:在TabHost的子Activity中通过打开修改地址Activity获取新的位置信息,将新信息返回子Activity并更新其经纬度信息。

参考资料:

1、http://www.cnblogs.com/relinson/archive/2012/03/25/startActivityForResult.html

2、http://zhidao.baidu.com/question/2052260904706818147.html

看了资料1以后明白根本问题是因为TabHost这东西一直位于布局最上层。

一开始我想把TabHost往下移,就像WORD或者PPT一样,把TabHost置于底层,然而不得其法。

于是退而求其次,参考资料1依葫芦画瓢,然而还是不行。步骤2中getLocalActivityManager()方法是ActivityGroup中的方法,我没继承ActivityGroup,也没继承TabActivity,自然就没办法用这个方法。于是我就自己new了一个LocalActivityManager,然而还是不行。一设断点,发现原来是subActivity为空,也就是说getLocalActivityManager().getCurrentActivity()没取到值。我觉得这方法可能不是要继承ActivityGroup就是要继承TabActivity,然而我并不像继承这两个中的任何一个,所以我想了一个笨办法。这个笨办法不用细说了,看代码大家就都知道了。

PS:如果有更好的方法麻烦告知我一声,我也是困扰了两天走投无路了才出此下策。


1、子Activity

    //以下是FormerActivity中的全局变量
    private static final int REQUEST_CODE = 3;//大于0就好,作用是区别是哪个Activity回传的数据
    private boolean isFromParent = false;//onResume时区分是否需要重新刷新
    //以下代码放在准备调用startActivityForResult的方法中
    Intent intent = new Intent(FormerActivity.this, LatterActivity.class);
    isFromParent = true;
    getParent().startActivityForResult(intent, REQUEST_CODE);

2、父Activity(即调用TabHost所在的布局文件的Activity

    private String latitude = null;//纬度
    private String longitude = null;//经度

    public String getLongitude() {
        return longitude;
    }

    public void setLongitude(String longitude) {
        this.longitude = longitude;
    }

    public String getLatitude() {
        return latitude;
    }

    public void setLatitude(String latitude) {
        this.latitude = latitude;
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (resultCode) {
            case RESULT_OK:
                latitude = data.getStringExtra("latitude");
                longitude = data.getStringExtra("longitude");
                setLocationResult();
                break;
            case RESULT_CANCELED:
                break;
            default:
                break;
        }
    }

    public void setLocationResult(){
        setLatitude(latitude);
        setLongitude(longitude);
    }

3、子Activity

    @Override
    protected void onResume() {
        super.onResume();
        if (isFromParent) {//判断是否从父Activity处获取经纬度,若获取,则更新当前经纬度信息
            getLocationResult();
        }
    }

    public void getLocationFromParent() {//从父Activity处获取经纬度
        MainNativeActivity parentActivity = (PanrentActivity) FormerActivity.this.getParent();
        parentActivity.setLocationResult();
        String latitudeLR = parentActivity.getLatitude();
        String longitudeLR = parentActivity.getLongitude();
        if (latitudeLR != null && longitudeLR != null) {
            longitude = longitudeLR;
            latitude = latitudeLR;
        }
    }


你可能感兴趣的:(小白安卓开发历险记)