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
相关产品推荐
相关产品推荐

