Problem mit ViewBindng in Fragmenten in Android

Aug 25 2020

Ich hatte eine Aktivität und habe dort ohne Probleme ViewBinding verwendet. Nicht, dass ich ein ähnliches Fragment erstellt hätte und beabsichtige, dort auch ViewBinding zu verwenden. Leider erhalte ich Fehlermeldungen, obwohl ich die auf der Google Develper-Seite genannten Schritte zu ViewBinding (https://developer.android.com/topic/libraries/view-binding)

Hier sehen Sie die Java-Datei:

package com.example.td.barapp;

import android.os.Bundle;

import androidx.fragment.app.Fragment;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.td.barapp.databinding.ActivitySelectionMenuBinding;

/**
 * A simple {@link Fragment} subclass.
 * Use the {@link Menu_Fragment#newInstance} factory method to
 * create an instance of this fragment.
 */
public class Menu_Fragment extends Fragment {

    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;



    public Menu_Fragment() {
        // Required empty public constructor
    }

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment Menu_Fragment.
     */
    // TODO: Rename and change types and number of parameters
    public static Menu_Fragment newInstance(String param1, String param2) {
        Menu_Fragment fragment = new Menu_Fragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }

        binding.imageButtonCocktailsEn.setOnClickListener(this);
        binding.imageButtonCocktailsAlcfreeEn.setOnClickListener(this);
        binding.imageButtonLongdrinksEn.setOnClickListener(this);
        binding.imageButtonWhiskyEn.setOnClickListener(this);
        binding.imageButtonLiquorEn.setOnClickListener(this);
        binding.imageButtonBeerEn.setOnClickListener(this);
        binding.imageButtonSoftdrinksEn.setOnClickListener(this);
        binding.imageButtonHotDrinksEn.setOnClickListener(this);
    }


    private Menu_FragmentBinding binding;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_menu_, container, false);

        //Include ViewBinding
        binding = Menu_FragmentBinding.inflate(inflater, container, false);
        View view = binding.getRoot();
        return view;

    }
}

Ich erhalte die Fehlermeldung "Symbol 'Menu_FragmentBinding' kann nicht aufgelöst werden" und "Methode 'getRoot ()' kann nicht aufgelöst werden". Ich verstehe nicht, warum ich sie bekomme. Hat jemand von euch eine Idee? Ich würde mich über jeden Kommentar freuen und wäre dankbar für Ihre Hilfe.

Antworten

1 SouravBagchi Aug 25 2020 at 14:47

Verwenden Sie zunächst keinen abschließenden Unterstrich im Namen der Layoutdatei. Entfernen Sie den nachfolgenden Unterstrich vonfragment_menu_

Für jede Layoutdatei wird eine Bindungsklasse generiert. Standardmäßig basiert der Name der Klasse auf dem Namen der Layoutdatei, konvertiert sie in Pascal-Groß- und Kleinschreibung und fügt das Bindungssuffix hinzu. Der obige Layout-Dateiname lautet activity_main.xml, also die entsprechende generierte Klasse ActivityMainBinding.

Wenn der Name Ihrer Layoutdatei also frargemnt_menu.xml lautet, lautet die entsprechende generierte Klasse FragmentMenuBinding

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        //Inflate using viewbinding
        binding = FragmentMenuBinding.inflate(inflater, container, false);
        return binding.getRoot();

    }