首页 > 解决方案 > 使用数据绑定在片段活动中映射片段?

问题描述

这是我想要实现的目标:

Activity 中的一个小片段。这个小片段必须有地图视图和其中的一些其他布局。

这个小片段由扩展片段的单独类维护。在这个片段类中,我使用了数据绑定。

但是在 mapFragment.getMapAsync(this); 时出现以下异常;

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void com.google.android.gms.maps.SupportMapFragment.getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)”

以下是我正在使用的 XML 和 Java 代码。

XML

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <RelativeLayout android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.github.ybq.android.spinkit.SpinKitView
            android:id="@+id/dieselPriceSpinKit2"
            style="@style/SpinKitView.Large.Wave"
            android:layout_width="match_parent"
            android:layout_height="@dimen/_40ssp"
            android:layout_centerInParent="true"
            app:SpinKit_Color="#FFEB3B"
            android:layout_weight="1"
            android:elevation="5dp"
            />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Order Status"
            android:id="@+id/updateAboutOrders"
            android:layout_centerInParent="true"
            android:padding="@dimen/_20sdp"
            android:textColor="#FFFFFF"
            android:background="@color/colorAccent"
            android:textStyle="bold"
            android:textSize="@dimen/_20ssp"
            android:onClick="onOrderStatusClicked"
            android:visibility="gone"
            android:elevation="10dp"
            />

        <androidx.cardview.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:cardBackgroundColor="@color/colorAccent"
            app:cardCornerRadius="6dp"
            android:id="@+id/smallPreOrderCard"
            android:layout_margin="5dp"
            >

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <fragment
                    android:id="@+id/mapViewSmallFrag"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_alignParentTop="true"
                    android:layout_above="@+id/rl32"
                    android:name="com.google.android.gms.maps.SupportMapFragment"
                    />

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="@dimen/_5sdp"
                    android:id="@+id/rl32"
                    android:layout_alignParentBottom="true"
                    >

                    <ImageView
                        android:id="@+id/delBoyImageHomeActivity"
                        android:layout_width="@dimen/_50sdp"
                        android:layout_height="@dimen/_50sdp"
                        android:layout_alignParentStart="true"
                        android:layout_centerVertical="true"
                        />

                    <com.google.android.material.floatingactionbutton.FloatingActionButton
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_margin="10dp"
                        android:layout_toEndOf="@+id/delBoyImageHomeActivity"
                        android:src="@drawable/ic_call"
                        app:fabCustomSize="@dimen/_30sdp"
                        android:layout_centerVertical="true"
                        app:backgroundTint="@color/colorPrimary"
                        android:id="@+id/smallPreCardFragFAB"
                        tools:ignore="RelativeOverlap" />

                    <TextView
                        android:id="@+id/preOrderFragTV1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentEnd="true"
                        android:text="Delivery Boy Name"
                        android:textColor="#D1F800"
                        android:textSize="@dimen/_9ssp"
                        />

                    <TextView
                        android:id="@+id/delBoyNameHomeActivity"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/preOrderFragTV1"
                        android:layout_alignParentEnd="true"
                        android:text="Manish Garhwal"
                        android:textColor="#FFFFFF"
                        android:textSize="@dimen/_12ssp" />

                    <TextView
                        android:id="@+id/preOrderFragTV2"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/delBoyNameHomeActivity"
                        android:layout_alignParentEnd="true"
                        android:layout_marginTop="@dimen/_8sdp"
                        android:text="Delivery Boy Number"
                        android:textColor="#D1F800"
                        android:textSize="@dimen/_9ssp" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/preOrderFragTV2"
                        android:layout_alignParentEnd="true"
                        android:text="+91 8888888888"
                        android:id="@+id/delBoyNumberHomeActivity"
                        android:textColor="#FFFFFF"
                        android:textSize="@dimen/_12ssp" />

                </RelativeLayout>

            </RelativeLayout>

        </androidx.cardview.widget.CardView>

    </RelativeLayout>

</layout>

JAVA

public class SmallPreOrderFragment extends Fragment implements ContractorForSmallPreordersFrag.view, OnMapReadyCallback {

    private SmallPreOrderFragBinding fragBinding;
    private PresenterForSmallPreOrderFrag smallPrePresenter;

    private double orderLat1 = 0.0;
    private double orderLong1 = 0.0;

    private GoogleMap mMap;

    private View view;
    private MapView mapView;
    private SupportMapFragment mMapFragment;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        fragBinding = DataBindingUtil.inflate(inflater, R.layout.small_pre_order_frag, container, false);
        smallPrePresenter = new PresenterForSmallPreOrderFrag(this, new ModelForSmallPreOrderFrag());
        onActivityStart();
        return fragBinding.getRoot();
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        mMapFragment = (SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.mapViewSmallFrag);
        mMapFragment.getMapAsync(this);

    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
    }
}

请不要标记重复,除非您确定它是副本。请不要只看标题。我已经在互联网上刮了一下,但找不到任何解决方案。

如果发现重复,请用链接评论问题,我将自己删除这个问题。

谢谢你。

标签: androidgoogle-mapsandroid-fragmentsdata-bindingandroid-databinding

解决方案


推荐阅读