java - 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 目录并重新生成它,但它们都不起作用
解决方案
它爱了。我犯了一个愚蠢的错误。在 kotlin 中,您可以在不导入 .java 类的情况下使用 fragmentdirection,但在 java 中,您需要自己导入。我应该使用“PermissionFragmentDirections”,而不是“PermissionsFragmentDirections”
推荐阅读
- css - 仅转换边框 CSS
- c# - 您将如何使用 Spritebatch.Draw 绘制 RectangleF?
- express - 如何修改 sequelize 迁移
- java - 使用 Java 读取日志并在 Web 浏览器上显示它们
- java - 线程不能同时在同一个套接字上读写流?
- c# - 通过 JSON 发送的 DateTime 在 Azure 应用服务上减去一天
- keras - 'import keras.layers' 给出 No module named keras 错误,但如果它在 cmd 中运行就很好
- python - 扁平化字典
- electron - 在电子中使用foreverjs会导致电子应用程序在dock中重复
- r - R tmap tm_facet 将值分配给错误的位置