在AppCompatDialogFragment中点击OK按钮启动新Activity失效如何解决
问题排查&修复方案
可能的失效原因
- 没有在
AndroidManifest.xml中注册NewListActivity,跳转时抛出异常未被捕获,逻辑直接中断 mActivity存在空指针风险:getContext()在Fragment和宿主Activity解绑时会返回null,此时调用startActivity会触发空指针异常导致跳转失效- 未捕获跳转过程中的异常,无法定位具体错误点
修复后的代码
public class NameOfNewList extends AppCompatDialogFragment { @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity()); LayoutInflater layoutInflater = requireActivity().getLayoutInflater(); builder.setTitle("Nowa lista") .setView(layoutInflater.inflate(R.layout.activity_new_list_dialog, null)) .setNegativeButton("Cancel", (dialog, which) -> dialog.dismiss()) .setPositiveButton("OK", (dialog, which) -> startNewList()); return builder.create(); } public void startNewList() { // 提前检查上下文有效性,避免空指针 if (getContext() == null) { return; } try { Intent intent = new Intent(requireContext(), NewList.class); // 如有传参需求可在此处调用intent.putExtra方法添加参数 startActivity(intent); } catch (ActivityNotFoundException e) { // 打印异常日志方便排查,也可增加Toast提示用户 e.printStackTrace(); } } }
额外必查项
打开AndroidManifest.xml,确认已经添加NewList的注册配置,示例如下:
<activity android:name=".NewList" android:exported="false" />
如果NewList需要被外部应用打开,将android:exported属性值改为true即可。
如果修改后仍然无法跳转,可运行时打开Logcat控制台,筛选Error级别的日志,查看跳转时是否有其他异常抛出,可直接定位具体问题。
内容的提问来源于stack exchange,提问作者Mikołaj Garbula
相关产品推荐
相关产品推荐

