【问题标题】:How to properly inflate fragment?如何正确膨胀片段?
【发布时间】:2017-12-29 04:31:31
【问题描述】:

This code 显示 Google 地图和上面的一些标记。它在我的 Galaxy Note 4 上运行良好。奇怪的是,它在与我的应用程序集成时会崩溃。

MapActivity.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

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.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapActivity extends AppCompatActivity implements OnMapReadyCallback {

    SupportMapFragment mapFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);

        //  mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.trisakti_map);
        //  mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {

        googleMap.addMarker(new MarkerOptions()
                .position(new LatLng(-6.166434, 106.79781))
                .title("Universitas Trisakti"));

    }
}

activity_map.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="app.devbyzero.net.pascasarjanatrisakti.MapActivity"
   >

    <fragment
        android:id="@+id/trisakti_map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_gravity="center"
        android:layout_height="match_parent" />


</RelativeLayout>

logcat 说:

12-29 11:00:26.893 3623-3623/? E/AndroidRuntime: 致命异常: main 进程:app.devbyzero.net.pascasarjanatrisakti,PID:3623 java.lang.RuntimeException:无法启动活动 组件信息{app.devbyzero.net.pascasarjanatrisakti/app.devbyzero.net.pascasarjanatrisakti.MapActivity}: android.view.InflateException:二进制 XML 文件行 #0:二进制 XML 文件行#0:膨胀类片段时出错 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3253) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) 在 android.app.ActivityThread.access$1100(ActivityThread.java:221) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)

当然,当xml中的fragment部分被注释掉的时候,就没有crash了。很奇怪,因为我从一个工作示例中获取了这个片段代码:/

那么,我该如何解决这个膨胀问题?

【问题讨论】:

  • 使用&lt;com.google.android.gms.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" /&gt;
  • 尝试在你的 xml 中用 FrameLayout 替换片段。
  • @SonuSanjeev 尝试在空对象引用上调用虚拟方法 'void com.google.android.gms.maps.SupportMapFragment.getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)'
  • @SonuSanjeev 相同的“尝试在 null 上调用虚拟方法 'void com.google.android.gms.maps.SupportMapFragment.getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)'对象引用”

标签: android android-fragments


【解决方案1】:

检查包名是否正确,去掉下面几行

app:layout_behavior="@string/appbar_scrolling_view_behavior"
 tools:context="app.devbyzero.net.pascasarjanatrisakti.MapActivity"

还要确保你在清单中添加了这些:

<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
<meta-data android:name="com.google.android.geo.API_KEY" android:value="@string/google_places_api_key" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多