错误:找不到符号导入androidx.navigation.fragment.navArgs

时间:2020-05-30 23:02:04

标签: java android

我正在通过https://codelabs.developers.google.com/codelabs/build-your-first-android-app/#8网站进行“用Java构建您的第一个Android应用程序”。 一切正常,直到进入第8步,即导入androidx.navigation.fragment.navArgs,但出现错误:

导入androidx.navigation.fragment。 navArgs ;

我该如何解决?什么意思?

4 个答案:

答案 0 :(得分:1)

这是代码实验室的错误,是从使用by navArgs() Kotlin属性委托检索参数的Kotlin version of the code lab中提取的(如Using Safe Args guide中所述)。

在Java中这不是必需的,因为您使用SecondFragmentArgs.fromBundle(getArguments())方法来检索参数类。

因此,您可以跳过该导入:它在任何地方都没有使用,可以放心地忽略。

答案 1 :(得分:1)

如果您正在关注 building your first app in java 并且遇到此错误,请尝试在导入后评论删除

import androidx.navigation.fragment.navArgs;

答案 2 :(得分:0)

您的构建脚本部分中有两个 build.gradle 。其中一个是项目范围的文件,另一个是您的模块文件。

在您的项目之一中,必须在 depencies 中插入以下行:

    dependencies {

        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.3.0-alpha04"
    }

在另一个文件(即模块的build.gradle)中,您必须添加以下行(通常在它的上面加上其他行):

apply plugin: 'androidx.navigation.safeargs.kotlin'

另一方面,当您开始学习时,强烈建议您学习Kotlin而不是Java。 Kotlin是Google最新支持的语言,用于开发Android应用。

让我知道它是否可以解决您的问题。

答案 3 :(得分:0)

这是 Java 教程的一个错误,因为较新的 Android Studio 版本,在 Kotlin 版本上,它不会给您带来这些问题。

尝试转到“SecondFragment.java”文件并将其添加到行中: @SuppressLint("StringFormatInvalid" //避免格式问题的行。

onViewCreated 方法之前,所以它会像这样结束:

@SuppressLint("StringFormatInvalid")
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    Integer count = SecondFragmentArgs.fromBundle(getArguments()).getMyArg();
    String countText = getString(R.string.random_heading, count);
    TextView headerView = view.getRootView().findViewById(R.id.textview_header);
    headerView.setText(countText);
    Random random = new java.util.Random();
    Integer randomNumber = 0;

    if (count > 0) {
        randomNumber = random.nextInt(count + 1);
    }

    TextView randomView = view.getRootView().findViewById(R.id.textview_random);
    randomView.setText(randomNumber.toString());

    view.findViewById(R.id.button_second).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            NavHostFragment.findNavController(SecondFragment.this)
                    .navigate(R.id.action_SecondFragment_to_FirstFragment);
        }
    });

我告诉你的那行之后的所有其他代码都与教程相同(我把它放在以防万一),希望它有所帮助;)