Error calling getLayoutInflater() inside a Fragment

Asked

Viewed 287 times

2

I’m having a problem creating a custom window. The idea is to have a balloon that presents an image and some basic information about a location, with a link to another activity in greater detail.

The problem is that the getLayoutInflater() presents the following error:

"Fragment.getLayoutInflater can only be called from Within the same library group (groupid=com.android.support)"

Mapafragment.java

import android.app.admin.SystemUpdatePolicy;
import android.content.Context;
import android.location.Criteria;
import android.location.LocationManager;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Toast;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapaFragment extends SupportMapFragment implements OnMapReadyCallback {
    private Context context;
    LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );

    SupportMapFragment mapFragment;
    private GoogleMap mMap;
    private LocationManager locationManager;
    private static final String TAG = "MapaTag";
    private String title[] = {"Medianeira - PR", "Pensao da Juraci"};
    private String here = "Estou Aqui!";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getMapAsync(this);

    }

    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {

        mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {

            @Override
            public View getInfoWindow(Marker arg0) {
                return null;
            }

            @Override
            public View getInfoContents(Marker arg0) {

                View v = getLayoutInflater().inflate(R.layout.inflate, null);
                return v;

            }
        });

        mMap = googleMap;
        Marker marker;

        //Location
        LatLng medianeira = new LatLng(-25.295,-54.0939);
        LatLng pensaoJuraci = new LatLng(-25.302268,-54.116805);

        // Add a marker in Medianeira
        mMap.addMarker(new MarkerOptions().position(medianeira).title(title[0]).snippet(here));
        mMap.addMarker(new MarkerOptions().position(pensaoJuraci).title(title[1]).snippet(here));

        // Move the camera to inicial location
        mMap.moveCamera(CameraUpdateFactory.newLatLng(medianeira));

        MarkerOptions options = new MarkerOptions();

        try {
            locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);

            Criteria criteria = new Criteria();
            String provider = locationManager.getBestProvider(criteria, true);

            mMap.setMyLocationEnabled(true);
            Toast.makeText(getContext(), "Provider: "+provider, Toast.LENGTH_SHORT).show();
        }catch (SecurityException ex){
            Log.e(TAG, "ERROR", ex);
        }
    }
}
  • The mistake is clear, my recommendation is to change getLayoutInflater() within the getInfoContents for layoutManager

1 answer

0

Error indicates that this method can only be used within the group com.android.support, that is, its use is restricted to the API/LIBRARY.

I can’t verify it but it should be noted with @RestrictTo(LIBRARY_GROUP).

I assume you are using an older version of the API as I cannot reproduce that error in the most current version.

Besides this problem there is another in your code, the line

LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );

will make an exception, since context is void.

Eliminate this line and get Layoutinflater in the method getInfoContents(), thus:

LayoutInflater inflater = LayoutInflater.from(getActivity());
View v = inflater.inflate(R.layout.inflate, null);

Browser other questions tagged

You are not signed in. Login or sign up in order to post.