You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fragment中EditText跳转地图Activity获取纬度后不显示问题求解

解决Fragment中EditText接收地图返回纬度不显示的问题

看起来你遇到的核心问题是从地图Activity返回数据后,Fragment里的EditText没有正确更新,我来帮你一步步排查修复:

第一步:确保用正确的方式启动地图Activity并接收返回结果

你需要用startActivityForResult(或新的Activity Result API)来启动地图Activity,这样才能拿到返回的数据。

旧API方式(兼容旧版本)

在你的Fragment的onViewCreated里初始化EditText并设置点击事件:

public class YourFragment extends Fragment {
    private EditText latitude; // 把EditText设为Fragment成员变量,避免引用失效

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.your_fragment_layout, container, false);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        // 正确初始化EditText:用Fragment的视图findViewById,而不是getActivity()
        latitude = view.findViewById(R.id.latitude);
        
        latitude.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getActivity(), MapActivity.class);
                // 1001是自定义请求码,只要唯一就行
                startActivityForResult(intent, 1001);
            }
        });
    }

    // 重写onActivityResult接收返回数据
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // 匹配请求码和结果状态
        if (requestCode == 1001 && resultCode == Activity.RESULT_OK) {
            if (data != null) {
                // 获取返回的纬度值,第二个参数是默认值
                double latValue = data.getDoubleExtra("latitude_value", 0.0);
                // 把纬度转为字符串设置到EditText
                latitude.setText(String.format("%.6f", latValue)); // 格式化显示更精准
            }
        }
    }
}

新API方式(推荐,startActivityForResult已废弃)

用Activity Result API更安全,避免生命周期问题:

public class YourFragment extends Fragment {
    private EditText latitude;
    private ActivityResultLauncher<Intent> mapActivityLauncher;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 注册结果回调
        mapActivityLauncher = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            result -> {
                if (result.getResultCode() == Activity.RESULT_OK) {
                    Intent data = result.getData();
                    if (data != null) {
                        double latValue = data.getDoubleExtra("latitude_value", 0.0);
                        latitude.setText(String.format("%.6f", latValue));
                    }
                }
            }
        );
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        latitude = view.findViewById(R.id.latitude);
        
        latitude.setOnClickListener(v -> {
            Intent intent = new Intent(getActivity(), MapActivity.class);
            mapActivityLauncher.launch(intent);
        });
    }
}

第二步:确保地图Activity正确返回数据

在地图Activity中获取到纬度后,必须通过setResult把数据返回,不能直接finish:

// 假设你已经获取到纬度值,比如double lat = 39.9042;
Intent resultIntent = new Intent();
resultIntent.putExtra("latitude_value", lat);
// 一定要设置RESULT_OK,否则Fragment会认为结果无效
setResult(Activity.RESULT_OK, resultIntent);
finish(); // 关闭地图Activity

排查常见坑点

  • 不要用getActivity().findViewById初始化Fragment的EditText:Fragment的视图是独立于Activity的,必须用Fragment自己的view.findViewById,否则可能拿到空引用或者其他视图。
  • 检查地图Activity是否正确设置了Result:如果没调用setResult(RESULT_OK, intent)就finish,Fragment的onActivityResult里resultCode会是RESULT_CANCELED,无法接收数据。
  • EditText状态问题:即使EditText设置了android:editable="false"或android:enabled="false",setText()依然能生效,所以这个不是问题。

内容的提问来源于stack exchange,提问作者felix12340

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:39:29