1

I am trying to bind a button which i have put inside a MapFragment I want my map to have a button which acts like a menu button

this is my fragment

public class MapFragment extends Fragment implements
    OnMapReadyCallback,
    View.OnClickListener{

public SupportMapFragment mapFragment;
private GoogleMap mMap;
FragmentMapBinding fragmentMapBinding;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    fragmentMapBinding = DataBindingUtil.inflate(inflater,R.layout.fragment_map,container,false);

    View rootView = fragmentMapBinding.getRoot();
    fragmentMapBinding.setHandler(this);
    mapFragment = (SupportMapFragment) getChildFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

    return rootView;
}
}

this is the .xml of the fragment

<layout xmlns:android="http://schemas.android.com/apk/res/android">

<data>
    <variable
        name="handler"
        type="com.plotalong.android.activity.fragment.MapFragment"/>
</data>

<fragment xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.plotalong.android.activity.MapsActivity" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TEST"
        android:onClick="@{() -> handler.menuButtonClick()}"
        />
</fragment>

and this is the error log I get

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.plotalong.android/com.plotalong.android.activity.MainActivity}: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
                                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2338)
                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
                                                                       at android.app.ActivityThread.access$800(ActivityThread.java:151)
                                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
                                                                       at android.os.Handler.dispatchMessage(Handler.java:110)
                                                                       at android.os.Looper.loop(Looper.java:193)
                                                                       at android.app.ActivityThread.main(ActivityThread.java:5292)
                                                                       at java.lang.reflect.Method.invokeNative(Native Method)
                                                                       at java.lang.reflect.Method.invoke(Method.java:515)
                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
                                                                       at dalvik.system.NativeStart.main(Native Method)
                                                                    Caused by: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
                                                                       at android.databinding.ViewDataBinding.mapBindings(ViewDataBinding.java:1092)
                                                                       at android.databinding.ViewDataBinding.mapBindings(ViewDataBinding.java:1149)
                                                                       at android.databinding.ViewDataBinding.mapBindings(ViewDataBinding.java:600)
                                                                       at com.plotalong.android.databinding.FragmentMapBinding.<init>(FragmentMapBinding.java:24)
                                                                       at com.plotalong.android.databinding.FragmentMapBinding.bind(FragmentMapBinding.java:134)
                                                                       at android.databinding.DataBinderMapper.getDataBinder(DataBinderMapper.java:15)
                                                                       at android.databinding.DataBindingUtil.bind(DataBindingUtil.java:185)
                                                                       at android.databinding.DataBindingUtil.inflate(DataBindingUtil.java:120)
                                                                       at android.databinding.DataBindingUtil.inflate(DataBindingUtil.java:88)
                                                                       at com.plotalong.android.activity.fragment.MapFragment.onCreateView(MapFragment.java:66)
                                                                       at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192)
                                                                       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299)
                                                                       at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)
                                                                       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)
                                                                       at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758)
                                                                       at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363)
                                                                       at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149)
                                                                       at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103)
                                                                       at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013)
                                                                       at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388)
                                                                       at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:607)
                                                                       at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1174)
                                                                       at android.app.Activity.performStart(Activity.java:5274)
                                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2311)
                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) 
                                                                       at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321) 
                                                                       at android.os.Handler.dispatchMessage(Handler.java:110) 
                                                                       at android.os.Looper.loop(Looper.java:193) 
                                                                       at android.app.ActivityThread.main(ActivityThread.java:5292) 
                                                                       at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                       at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824) 
                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640) 
                                                                       at dalvik.system.NativeStart.main(Native Method) 

What could be the problem with the code??

1 Answers1

0

The problem is that you can't stick a <Button> (or any other <View>) inside a <fragment> tag. In general you should not attempt to modify what's inside SupportMapFragment, that's private to SupportMapFragment itself. You could place a Button above or below SupportMapFragment, though. (outside of SupportMapFragment)

Uli
  • 2,828
  • 20
  • 23