满足Firebase查询匹配条件时,如何阻止Fragment页面跳转?
问题解决:匹配Firebase数据后仍跳转Fragment的问题
你的核心问题是:当查询到Firebase中存在匹配的AmazonLink时,虽然弹出了提示Toast,但代码依然执行了Fragment跳转逻辑。这是因为你没有在找到匹配项后阻止后续的跳转代码运行。
修改方案
添加一个布尔标记记录是否找到匹配链接,再根据标记决定是否执行跳转:
nextBtn.setOnClickListener(view1 -> { String inputLink = amazonLink.getText().toString(); // 提前检查空输入,避免无效查询 if (TextUtils.isEmpty(inputLink)){ Toast.makeText(getActivity(), "Empty field not allowed!", Toast.LENGTH_LONG).show(); Log.d("TAG","Testing2"); return; // 直接返回,不执行后续逻辑 } Query query = userOneRef.orderByChild("AmazonLink").equalTo(inputLink); query.get().addOnCompleteListener(task -> { if (task.isSuccessful()) { boolean linkExists = false; for (DataSnapshot ds : task.getResult().getChildren()) { linkExists = true; // 标记链接已存在 String existingLink = ds.child("AmazonLink").getValue(String.class); Toast.makeText(getActivity(), "Amazon link already on tracker", Toast.LENGTH_LONG).show(); Log.d("TAG", existingLink); Log.d("TAG","Testing1"); } if (!linkExists) { // 仅当链接不存在时执行跳转 Log.d("TAG","Testing3"); Bundle amazonLinkBundle = new Bundle(); amazonLinkBundle.putString("passingLink", inputLink); getParentFragmentManager().setFragmentResult("gettingLink", amazonLinkBundle ); Fragment fragment = new FinalHome_Fragment(); FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.fragment_container, fragment); fragmentTransaction.addToBackStack(String.valueOf(Home_Fragment.class)); fragmentTransaction.commit(); } } else { Log.d("TAG", task.getException().getMessage()); //Never ignore potential errors! } }); });
关键修改点
- 提前校验空输入:把空值判断移到Firebase查询前,减少无效请求,提升响应速度。
- 新增存在状态标记:用
linkExists变量记录是否在数据库中找到匹配链接,作为跳转判断依据。 - 条件触发跳转:仅当
linkExists为false时才执行Fragment跳转,确保匹配到数据时不触发跳转。 - 变量重命名规避混淆:将输入链接存入
inputLink,避免和循环内的amazonLink变量重名导致逻辑混乱。
内容的提问来源于stack exchange,提问作者user19585404
相关产品推荐
相关产品推荐

