FragmentDirections generate success but Cannot resolve symbol

Viewed 108

I have found a wired problem while learning navigation Safe Args.IDE cannot resolve symbol "PermissionsFragmentDirections"while PermissionsFragmentDirections.java file is already generate in .build directory. PermissionsFragmentDirections

here are my codes


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> 

I have tried: restart android studio delete .build directory and regenerate it but none of them work

1 Answers

It sloved. I made a stupid mistake. In kotlin you can use fragmentdirection without import .java class,but in java ,you need import it yourself. And I should use "PermissionFragmentDirections",not"PermissionsFragmentDirections"

Related