Android 开发小贴士--Intent跳转

本文介绍了一种更规范且安全的Android页面跳转方法,通过使用静态常量字符串避免因输入错误导致的数据丢失问题,并提醒开发者注意startActivityForResult方法的回调特性。

在Android开发中页面跳转算是非常常见的操作了,使用也很简单

 Intent intent = new Intent(mActivity, ListActivity.class);
 intent.putExtra("type", mtype);
 startActivity(intent);

我见过3、4年开发经验的人还在这么写,当然,这样写也没错,但却不够规范安全,如果手抖把type多按了个空格,getIntent的时候怎么也得不到值,代码还不会报错,我刚入行的时候就犯过这个错误。

所以正确的方法是在接收值的Activity中命名一个static常量字符串

Intent intent = new Intent(mActivity, ListActivity.class);
intent.putExtra(ListActivity.TYPE, mtype);
startActivity(intent);


private int TYPE_REC_FOCUS = 0;
private int mtype;
public static final String TYPE = “type”;
mtype = getIntent().getIntExtra(TYPE, TYPE_REC_FOCUS);

另外提醒一下,startActivityForResult方法的回调方法onActivityResult 是先于Activity的生命周期的,所以activity A->B->C,并直接携带值回到A是可以以此实现的。

那好,接下来,你看看我应该怎么修改,在原封不动的基础上,首先是HomeFragment,代码如下:package com.example.bus.ui.home; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import com.example.bus.MainActivity; import com.example.bus.SearchResultActivity; import com.example.bus.databinding.FragmentHomeBinding; public class HomeFragment extends Fragment { private FragmentHomeBinding binding; public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { com.example.bus.ui.home.HomeViewModel homeViewModel = new ViewModelProvider(this).get(com.example.bus.ui.home.HomeViewModel.class); binding = FragmentHomeBinding.inflate(inflater, container, false); View root = binding.getRoot(); final TextView textView = binding.textHome; homeViewModel.getText().observe(getViewLifecycleOwner(), textView::setText); return root; binding.homeSearch.setOnClickListener(v -> { String keyword = binding.homeInput.getText().toString().trim(); if (keyword.isEmpty()) { Toast.makeText(requireContext(), "请输入关键词", Toast.LENGTH_SHORT).show(); return; } // ✅ 使用 MainActivity 的统一权限流程 MainActivity activity = (MainActivity) requireActivity(); activity.ensureFineLocationPermission(() -> { // ✅ 权限通过后再跳转 Intent intent = new Intent(requireContext(), SearchResultActivity.class); intent.putExtra("keyword", keyword); startActivity(intent); }); }); } @Override public void onDestroyView() { super.onDestroyView(); binding = null; } }报错Unreachable statement,位置在这 binding.homeSearch.setOnClickListener(v -> { String keyword = binding.homeInput.getText().toString().trim(); if (keyword.isEmpty()) { Toast.makeText(requireContext(), "请输入关键词", Toast.LENGTH_SHORT).show(); return; } // ✅ 使用 MainActivity 的统一权限流程 MainActivity activity = (MainActivity) requireActivity(); activity.ensureFineLocationPermission(() -> { // ✅ 权限通过后再跳转 Intent intent = new Intent(requireContext(), SearchResultActivity.class); intent.putExtra("keyword", keyword); startActivity(intent); }); });那我应该怎么修改你提供一下完整代码
11-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值