You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Fragment绑定报错:符号‘id’无法解析

解决Fragment跳转时资源ID无法解析的问题

问题背景

使用View Binding在Android Studio中实现两个Fragment的跳转,已在XML导航图配置好Fragment连接,但代码中出现资源ID无法解析的错误,涉及按钮ID和导航Action ID。提供的SettingsFragment代码如下:

package com.mqtt.workactiv.ui.settings;

import static android.os.Build.VERSION_CODES.R;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;

import com.mqtt.workactiv.databinding.FragmentSettingsBinding;

public class SettingsFragment extends Fragment {

    private FragmentSettingsBinding binding;

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        SettingsViewModel settingsViewModel =
                new ViewModelProvider(this).get(SettingsViewModel.class);

        binding = FragmentSettingsBinding.inflate(inflater, container, false);
        View root = binding.getRoot();

        return root;
    }
    @Override
    public void onViewCreated (@NonNull View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);

        NavController navController = Navigation.findNavController(view);

            Button gateConnButton;
        gateConnButton = view.findViewById(R.id.gatewayConnButton);
        gateConnButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    navController.navigate(R.id.action_navigation_setting_to_gateway4);

                }
            });
    }

}

错误原因分析

  1. 错误的R类导入:代码顶部导入了android.os.Build.VERSION_CODES.R,这个R是Android版本常量类,而非项目的资源R类,导致无法识别布局和导航图中的ID。
  2. 冗余的findViewById:已启用View Binding,仍使用传统的findViewById获取控件,既冗余又可能因R类错误引发问题。

解决方案步骤

1. 替换错误的R类导入

删除import static android.os.Build.VERSION_CODES.R;,添加项目的资源R类导入(若Android Studio未自动导入):

import com.mqtt.workactiv.R;

2. 用View Binding替代findViewById

直接通过初始化好的binding对象获取控件,无需再调用findViewById:

binding.gatewayConnButton.setOnClickListener(...)

3. 确保导航资源正确生成

若导航Action ID仍报错,执行Build -> Rebuild Project,让Android Studio重新生成资源索引。

修正后的完整代码

package com.mqtt.workactiv.ui.settings;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import com.mqtt.workactiv.R;
import com.mqtt.workactiv.databinding.FragmentSettingsBinding;

public class SettingsFragment extends Fragment {

    private FragmentSettingsBinding binding;

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        SettingsViewModel settingsViewModel =
                new ViewModelProvider(this).get(SettingsViewModel.class);

        binding = FragmentSettingsBinding.inflate(inflater, container, false);
        return binding.getRoot();
    }

    @Override
    public void onViewCreated (@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        NavController navController = Navigation.findNavController(view);

        // 使用View Binding获取按钮并设置点击事件
        binding.gatewayConnButton.setOnClickListener(v -> 
                navController.navigate(R.id.action_navigation_setting_to_gateway4)
        );
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        binding = null; // 释放Binding引用,避免内存泄漏
    }
}

额外注意事项

  • 确认View Binding已在app模块的build.gradle中启用:
    android {
        buildFeatures {
            viewBinding true
        }
    }
    
  • 导航图中Action的ID需与代码中引用的完全一致,注意拼写和大小写。

内容的提问来源于stack exchange,提问作者asapsonter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 20:03:30