Problem mit ViewBindng in Fragmenten in Android
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
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();
}