android requireActivity() 和 getActivity()使用问题

requireActivity()getActivity() 都是从 Fragment 中获取宿主 Activity 的方法,但它们有一些不同的行为和使用场景。

requireActivity()

  • 抛出异常:如果 Fragment 没有附加到任何 Activity,调用 requireActivity() 会抛出 IllegalStateException
  • 安全性:通常在你确定 Fragment 已经附加到 Activity 时使用,可以避免 NullPointerException

getActivity()

  • 返回null:如果 Fragment 没有附加到任何 Activity,调用 getActivity() 会返回 null
  • 需要检查null:需要检查返回值是否为 null,否则可能会导致 NullPointerException

选择哪一个?

  • 推荐使用 requireActivity():因为它更具安全性,强制你处理 Fragment 未附加到 Activity 的情况。
  • getActivity() 的使用场景:如果你需要处理 Fragment 未附加到 Activity 的情况,可以使用 getActivity() 并进行 null 检查。

在具体代码中,如果你确信在调用时 Fragment 已经附加到 Activity,可以使用 requireActivity(),否则使用 getActivity() 并进行 null 检查。

import android.content.Intent;
import android.provider.Settings;
import android.widget.Toast;
import androidx.fragment.app.Fragment;

public class MyFragment extends Fragment {
    private void openWifiSettings() {
        try {
            Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
            if (intent.resolveActivity(requireActivity().getPackageManager()) != null) {
                startActivity(intent);
            } else {
                Toast.makeText(requireContext(), "无法打开Wi-Fi设置", Toast.LENGTH_SHORT).show();
            }
        } catch (Exception e) {
            Toast.makeText(requireContext(), "无法打开Wi-Fi设置", Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }
    }
}
import android.content.Intent;
import android.provider.Settings;
import android.widget.Toast;
import androidx.fragment.app.Fragment;

public class MyFragment extends Fragment {
    private void openWifiSettings() {
        try {
            Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
            if (getActivity() != null && intent.resolveActivity(getActivity().getPackageManager()) != null) {
                startActivity(intent);
            } else {
                Toast.makeText(requireContext(), "无法打开Wi-Fi设置", Toast.LENGTH_SHORT).show();
            }
        } catch (Exception e) {
            Toast.makeText(requireContext(), "无法打开Wi-Fi设置", Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }
    }
}

总结

  • 使用 requireActivity() 可以避免 NullPointerException,但需要确保 Fragment 已经附加到 Activity
  • 使用 getActivity() 更加灵活,但需要进行 null 检查,以确保 Activity 存在。

根据具体情况选择合适的方法,以确保代码的健壮性和稳定性。

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆咖啡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值