android - 使用数据绑定在片段活动中映射片段?
问题描述
这是我想要实现的目标:
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;
}
}
请不要标记重复,除非您确定它是副本。请不要只看标题。我已经在互联网上刮了一下,但找不到任何解决方案。
如果发现重复,请用链接评论问题,我将自己删除这个问题。
谢谢你。
解决方案
推荐阅读
- css - 为什么 ant design 不提供像 bootstrap 这样的 CSS 文档?
- javascript - 如何使用 JSDoc Typescript 声明隐藏“私有”方法?
- android - Flutter Login with Facebook 返回构建错误
- linux - 在 linux bash 上使用 Curl 上传文件不起作用
- batch-file - 如何将多个 .TXT 文件批量合并为一个新的 .TXT 文件?
- html - 悬停时引导列相互重叠
- linux - Linux 上的 Azure 迁移评估
- mysql - 如何通过 order by 查询不同的?
- python - 四舍五入到6位数有什么问题吗?
- javascript - chartJS 折线图未绘制小于 minY 的值