首页 > 解决方案 > FragmentDirections 生成成功但无法解析符号

问题描述

我在学习导航时发现了一个连线问题 Safe Args.IDE 无法解析符号“PermissionsFragmentDirections”,而 PermissionsFragmentDirections.java 文件已经在 .build 目录中生成。 权限片段方向

这是我的代码


import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.Fragment;
import androidx.navigation.Navigation;

import com.example.kotlinconver2java.R;

import org.jetbrains.annotations.NotNull;

public class PermissionFragment extends Fragment {
    private final static int PERMISSIONS_REQUEST_CODE = 10;
    private final static String PERMISSIONS_REQUIRED[]={Manifest.permission.CAMERA};
    private static boolean hasPermissions(Context context,String... permissions){
        if (context != null && permissions != null) {
            for (String permission : permissions) {
                if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                    return false;
                }
            }
        }
        return true;
    }
    @Override
    public void onCreate(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (hasPermissions(requireContext())) {
            // If permissions have already been granted, proceed
            Navigation.findNavController(requireActivity(), R.id.fragment_container).navigate(
                    PermissionsFragmentDirections.actionPermissionsToSelector());

        } else {
            // Request camera-related permissions
            requestPermissions(PERMISSIONS_REQUIRED, PERMISSIONS_REQUEST_CODE);
        }

    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull @NotNull String[] permissions, @NonNull @NotNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == PERMISSIONS_REQUEST_CODE) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // Takes the user to the success fragment when permission is granted
                Navigation.findNavController(requireActivity(), R.id.fragment_container).navigate(
                        PermissionsFragmentDirections.actionPermissionsToSelector());
            } else {
                Toast.makeText(getContext(), "Permission request denied", Toast.LENGTH_LONG).show();
            }
        }
    }
}

PermissionFragment.java

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/nav_graph"
    app:startDestination="@id/permissionFragment">

    <fragment
        android:id="@+id/permissionFragment"
        android:name="com.example.kotlinconver2java.fragments.PermissionFragment"
        android:label="PermissionFragment" >
        <action
            android:id="@+id/action_permissionFragment_to_selectorFragment"
            app:destination="@id/selectorFragment"
            app:popUpTo="@id/permissionFragment"
            app:popUpToInclusive="true"/>
    </fragment>
    <fragment
        android:id="@+id/selectorFragment"
        android:name="com.example.kotlinconver2java.fragments.SelectorFragment"
        android:label="SelectorFragment" />

</navigation> 

我已经尝试过:重新启动 android studio 删除 .build 目录并重新生成它,但它们都不起作用

标签: javaandroidandroid-studio

解决方案


它爱了。我犯了一个愚蠢的错误。在 kotlin 中,您可以在不导入 .java 类的情况下使用 fragmentdirection,但在 java 中,您需要自己导入。我应该使用“PermissionFragmentDirections”,而不是“PermissionsFragmentDirections”


推荐阅读