我正在通过https://codelabs.developers.google.com/codelabs/build-your-first-android-app/#8网站进行“用Java构建您的第一个Android应用程序”。 一切正常,直到进入第8步,即导入androidx.navigation.fragment.navArgs,但出现错误:
导入androidx.navigation.fragment。 navArgs ;
我该如何解决?什么意思?
答案 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);
}
});
我告诉你的那行之后的所有其他代码都与教程相同(我把它放在以防万一),希望它有所帮助;)