英文:
cannot find FirstFragmentDirections & SecondFragmentArgs
问题
public class SecondFragment extends Fragment {
Integer myArg = SecondFragmentArgs.fromBundle(getArguments()).getMyArg();
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState
) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_second, container, false);
}
}
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.findViewById(R.id.random_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
TextView showCountTextView = view.getRootView().findViewById(R.id.textview_first);
int currentCount = Integer.parseInt(showCountTextView.getText().toString());
FirstFragmentDirections.ActionFirstFragmentToSecondFragment action = FirstFragmentDirections.actionFirstFragmentToSecondFragment(currentCount);
NavHostFragment.findNavController(FirstFragment.this).navigate(R.id.action_FirstFragment_to_SecondFragment);
}
});
view.findViewById(R.id.toast_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast myToast = Toast.makeText(getActivity(), "Hello toast!", Toast.LENGTH_SHORT);
myToast.show();
}
});
view.findViewById(R.id.count_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
countMe(view);
}
});
}
英文:
From: https://codelabs.developers.google.com/codelabs/build-your-first-android-app/#8
AndroidStudio 3.6.2
Last tasks in the step-by-step guide are producing the following errors:
>cannot find a symbol variable SecondFragmentArgs
package FirstFragmentDirections does not exist
cannot find symbol variable FirstFragmentDirections
Here is a sample of the code from SecondFragment.java:
public class SecondFragment extends Fragment {
Integer myArg = SecondFragmentArgs.fromBundle(getArguments()).getMyArg();
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState
) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_second, container, false);
}
Here is the code from FirstFragment.java:
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.findViewById(R.id.random_button);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
TextView showCountTextView = view.getRootView().findViewById(R.id.textview_first);
int currentCount = Integer.parseInt(showCountTextView.getText().toString());
FirstFragmentDirections.action_FirstFragment_to_SecondFragment action = FirstFragmentDirections.actionFirstFragmentToSecondFragment(currentCount);
NavHostFragment.findNavController(FirstFragment.this).navigate(R.id.action_FirstFragment_to_SecondFragment);
}
});
view.findViewById(R.id.toast_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast myToast = Toast.makeText(getActivity(), "Hello toast!", Toast.LENGTH_SHORT);
myToast.show();
}
});
view.findViewById(R.id.count_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
countMe(view);
}
});
}
}
答案1
得分: 3
我遇到了相同的问题,原来codelab在Build.gradle
文件中引用了SafeArgs的alpha版本。要解决这个问题,只需在顶层的Build.gradle
文件中包含最新的classpath。
buildscript {
repositories {
google()
}
dependencies {
def nav_version = "2.3.0";
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version";
}
}
此外,不要忘记将插件应用于你的应用或模块的Build.gradle
文件:
对于Java,使用以下代码:
apply plugin: "androidx.navigation.safeargs"
对于Kotlin,使用以下代码:
apply plugin: "androidx.navigation.safeargs.kotlin"
编辑:为了完整起见,你还需要重新构建Gradle,以便添加FirstFragmentDirections生成的类。可以通过在工具菜单中选择Build > Make Project来完成。
如果上述方法不起作用,可以参考下面的官方文档进行额外的故障排除。
参考文档:
https://developer.android.com/guide/navigation/navigation-pass-data
https://developer.android.com/jetpack/androidx/releases/navigation#safe_args
英文:
I faced the same issue, it turned out the codelab was referencing an alpha version of SafeArgs in the Build.gradle
file. To fix it, just include the latest classpath in your top level Build.gradle
file.
buildscript {
repositories {
google()
}
dependencies {
def nav_version = "2.3.0"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
}
}
Also, do not forget to apply plugin to your app or module's Build.gradle
file:
apply plugin: "androidx.navigation.safeargs"
if using Java or
apply plugin: "androidx.navigation.safeargs.kotlin"
for Kotlin
EDIT: For the sake of completeness, you also need to Rebuild Gradle for the FirstFragmentDirections generated class to be added. That can be done by choosing Build > Make Project in the tool menu.
Consult with the official docs below, as they offer additional troubleshooting if the above is not working.
Referenced Docs
https://developer.android.com/guide/navigation/navigation-pass-data
https://developer.android.com/jetpack/androidx/releases/navigation#safe_args
答案2
得分: 1
- “Project Structure -> Gradle Version” 的最低要求是 6.1.1。
- 在最右边打开你的 Gradle 侧边栏(或者按下两次 Shift 键 -> Gradle)。
- 点击“切换离线模式”按钮,确保它处于关闭状态。
- 这可能会开始一个大规模的 Gradle 下载,等待直到完成。
- 前往 “Build -> Make”。
- 不要忘记同步。
英文:
Project Structure -> Gradle Version
needs to be at least 6.1.1.- Open your Gradle sidebar on the far right (or double shift -> Gradle).
- Click the "Toggle Offline Mode" so it's off.
- This could start a massive Gradle download, wait until finished.
- Go to
Build -> Make
- Don't forget to sync.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论