片段xml错误?

Posted

技术标签:

【中文标题】片段xml错误?【英文标题】:fragment xml error? 【发布时间】:2017-03-09 10:51:53 【问题描述】:

当我使用这个 activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_>

   <fragment
       android:layout_
       android:layout_
       android:name="com.example.mahmoud.googlemap.MapFragment"
       android:id="@+id/map"/>

</RelativeLayout>

当我运行MainActivity.java at setContentView(R.layout.activity_main); Line: 时出现错误:

public class MainActivity extends AppCompatActivity 

  @Override
  protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
  

我已经完成了这门课MapFragment

package com.example.mahmoud.googlemap;

import android.graphics.BitmapFactory;
import android.location.Geocoder;
import android.location.Location;
import android.os.Bundle;
import android.view.View;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.CircleOptions;
import com.google.android.gms.maps.model.GroundOverlayOptions;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.PolygonOptions;

/**
 * Created by mahmoud on 01/05/2016.
 */
public class MapFragment extends SupportMapFragment implements GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener,
        GoogleMap.OnInfoWindowClickListener,
        GoogleMap.OnMapLongClickListener,
        GoogleMap.OnMapClickListener,
        GoogleMap.OnMarkerClickListener 

//-------------------- some Global Values -------------------------------------------//

private GoogleApiClient mGoogleApiClient;
    private Location mCurrentLocation;

    private final int[] MAP_TYPES =  GoogleMap.MAP_TYPE_SATELLITE,
            GoogleMap.MAP_TYPE_NORMAL,
            GoogleMap.MAP_TYPE_HYBRID,
            GoogleMap.MAP_TYPE_TERRAIN,
            GoogleMap.MAP_TYPE_NONE ;
    private int curMapTypeIndex = 0;

    //------------End Of Values   ----------------------------------------------------------------------------//


//--------------------   onViewCreated  ------------------------------------------//
    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) 
        super.onViewCreated(view, savedInstanceState);

        setHasOptionsMenu(true);

        mGoogleApiClient = new GoogleApiClient.Builder( getActivity() )
                .addConnectionCallbacks( this )
                .addOnConnectionFailedListener( this )
                .addApi( LocationServices.API )
                .build();

        initListeners();
    

    public void initListeners() 
        getMap().setOnMarkerClickListener(this);
        getMap().setOnMapLongClickListener(this);
        getMap().setOnInfoWindowClickListener( this );
        getMap().setOnMapClickListener(this);
    

    //--------------------------------------------- Life Cycle  -----------------------------------------------//
    @Override
    public void onStart() 
        super.onStart();
        mGoogleApiClient.connect();
    

    @Override
    public void onStop() 
        super.onStop();
        if( mGoogleApiClient != null && mGoogleApiClient.isConnected() ) 
            mGoogleApiClient.disconnect();
        
    



    //---------------------------------------------------------------------------------------//
    @Override
    public void onConnected(Bundle bundle) 
        mCurrentLocation = LocationServices
                .FusedLocationApi
                .getLastLocation( mGoogleApiClient );

        initCamera(mCurrentLocation);
    

    private void initCamera(Location location) 

        CameraPosition position = CameraPosition.builder()
                .target( new LatLng( location.getLatitude(),
                        location.getLongitude() ) )
                .zoom( 16f )
                .bearing( 0.0f )
                .tilt( 0.0f )
                .build();

        getMap().animateCamera( CameraUpdateFactory
                .newCameraPosition(position), null );

        getMap().setMapType( MAP_TYPES[curMapTypeIndex] );
        getMap().setTrafficEnabled( true );
        getMap().setMyLocationEnabled( true );
        getMap().getUiSettings().setZoomControlsEnabled(true);
    
//------------------------------------------------------//
    @Override
    public void onConnectionSuspended(int i) 

    

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) 

    

    @Override
    public void onInfoWindowClick(Marker marker) 

    
//--------------------------------------- On map Click -------------------------//
    @Override
    public void onMapClick(LatLng latLng) 

        MarkerOptions options = new MarkerOptions().position( latLng );
        options.title(getAddressFromLatLng( latLng ) );

        options.icon( BitmapDescriptorFactory.defaultMarker() );
        getMap().addMarker( options );
    
//-----------------------On Map Long Click -----------------------------------------------------------------------//
@Override
public void onMapLongClick(LatLng latLng) 
    MarkerOptions options = new MarkerOptions().position( latLng );
    options.title( getAddressFromLatLng( latLng ) );

    options.icon( BitmapDescriptorFactory.fromBitmap(
            BitmapFactory.decodeResource(getResources(),
                    R.mipmap.ic_launcher)) );

    getMap().addMarker( options );


    //--------------------- get AddressFromlatLng() ------------------------------//
    private String getAddressFromLatLng( LatLng latLng ) 
        Geocoder geocoder = new Geocoder( getActivity() );

        String address = "";
        try 
            address = geocoder
                    .getFromLocation( latLng.latitude, latLng.longitude, 1 )
                    .get( 0 ).getAddressLine( 0 );
         catch (Exception e ) 
        

        return address;
    
//---------------------------------- On Marker Click --------------------------------------------------------------------//
@Override
public boolean onMarkerClick(Marker marker) 
    marker.showInfoWindow();
    return true;

//---------------------- To Draw  On Map  and draw Shapes ---------------------------------//

    private void drawCircle( LatLng location ) 
        CircleOptions options = new CircleOptions();
        options.center( location );
        //Radius in meters
        options.radius( 10 );
        options.fillColor( getResources()
                .getColor( R.color.common_action_bar_splitter ) );
        options.strokeColor( getResources()
                .getColor( R.color.common_signin_btn_light_text_focused ) );
        options.strokeWidth( 10 );
        getMap().addCircle(options);
    
//------------------------  to draw Polygn --------------------------------------------------------------//
private void drawPolygon( LatLng startingLocation ) 
    LatLng point2 = new LatLng( startingLocation.latitude + .001,
            startingLocation.longitude );
    LatLng point3 = new LatLng( startingLocation.latitude,
            startingLocation.longitude + .001 );

    PolygonOptions options = new PolygonOptions();
    options.add(startingLocation, point2, point3);

    options.fillColor( getResources()
            .getColor(R.color.common_action_bar_splitter) );
    options.strokeColor( getResources()
            .getColor(R.color.common_signin_btn_light_text_focused) );
    options.strokeWidth( 10 );

    getMap().addPolygon(options);

    //--------------------------------Image On Map  --------------------------------------------//
    private void drawOverlay( LatLng location, int width, int height ) 
        GroundOverlayOptions options = new GroundOverlayOptions();
        options.position(location, width, height);

        options.image(BitmapDescriptorFactory
                .fromBitmap(BitmapFactory
                        .decodeResource(getResources(),
                                R.mipmap.ic_launcher)));
        getMap().addGroundOverlay(options);
    



【问题讨论】:

“它给我一个错误” 什么错误? 错误日志是什么? 您是否在您的MainActivity 中实现了您的MapFragment 【参考方案1】:

将 xml 片段中的名称更改为此

android:name="com.google.android.gms.maps.SupportMapFragment"

您的最终片段应如下所示

<fragment
   android:id="@+id/map"
   android:layout_
   android:layout_
   android:name="com.google.android.gms.maps.SupportMapFragment"/>

【讨论】:

以上是关于片段xml错误?的主要内容,如果未能解决你的问题,请参考以下文章

Android - 使用活动和片段导航 - 二进制 XML 文件错误

android.view.inflateexception 二进制 xml 文件第 7 行错误膨胀类片段

android.view.InflateException Binary xml 文件第 11 行:错误膨胀类片段

在“设置”片段中夸大类PreferenceScreen的错误

片段事务中的实例化错误

android.view.InflateException:二进制 XML 文件第 15 行:二进制 XML 文件第 19 行:膨胀类片段时出错