Home > Net >  fragment binding (symbol "id" cannot be resolved)
fragment binding (symbol "id" cannot be resolved)

Time:08-09

I am trying to use the binding method in android studio to connect two fragments using onCreate and onViewCreated methods. so far i am getting id not resolved error. I have already connected the fragments on the xml graph. Bellow is the code of the settings java file.

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 android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
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);

                }
            });
    }

}

CodePudding user response:

Make sure to add this in build.gradle(app)

 buildFeatures {
        viewBinding = true
    }

Then give sync project with gradle files. If this didnt work, try rebuild, invalidate cache/ restart.

Also view.findviewbyid not required if view binding is enabled. You can access button directly by something like this,

 binding.gateConnButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    navController.navigate(R.id.action_navigation_setting_to_gateway4);

                }
            });

CodePudding user response:

You can try code like this.

NavDirections navDirections = SettingsFragmentDirections.actionNavigationSettingToGateway4();

findNavController().navigate(navDirections, null);

I don't see your navigation xml file, so SettingsFragmentDirections.actionNavigationSettingToGateway4() can have another name. Fix those names yourself.

P.S. the versions of libraries which I'm using androidx.navigation:navigation-fragment-ktx:2.4.0, "androidx.navigation:navigation-ui-ktx:2.4.0"

  • Related