How to bind generic Java classes in Android bindin

2019-05-26 14:47发布

I have to bind generic Java class in Android binding project in Xamarin. Below is the code for normal class binding I added in metadata.xml.

<add-node path="/api/package[@name='com.phunware.mapping.manager']">
    <interface abstract="true" deprecated="not deprecated" extends="java.lang.Object" extends-generic-aware="java.lang.Object" final="false" name="Callback" static="false" visibility="public">
      <method abstract="true" deprecated="not deprecated" final="false" name="onSuccess" native="false" return="void" static="false" synchronized="false" visibility="public">
        <parameter name="building" type="com.phunware.mapping.model.Building"/>
      </method>
    </interface>
  </add-node>

<add-node path="/api/package[@name='com.phunware.mapping.manager']/class[@name='PhunwareMapManager']">
    <method abstract="false" deprecated="not deprecated" final="false" name="addBuilding" native="false" return="com.phunware.mapping.manager.PhunwareMapManager" static="false" synchronized="false" visibility="public">
      <parameter name="buildingId" type="long"/>
      <parameter name="callback" type="com.phunware.mapping.manager.Callback"/>
    </method>
  </add-node>

Equivalent java classes and methods getting binded are as below.

package com.phunware.mapping.manager;

public interface Callback<T> {
    void onSuccess(T var1);

    void onFailure(Throwable var1);
}

mapManager.addBuilding(buildingId,
                new Callback<Building>() {
                    @Override
                    public void onSuccess(Building building) {
                        Log.d(TAG, "Building loaded successfully");
                        currentBuilding = building;

                        // Populate floor spinner
                        spinnerAdapter.clear();
                        spinnerAdapter.addAll(building.getBuildingOptions().getFloors());

                        // Set building to initial floor value
                        FloorOptions initialFloor = building.initialFloor();
                        building.selectFloor(initialFloor.getLevel());

                        // Animate the camera to the building at an appropriate zoom level
                        CameraUpdate cameraUpdate = CameraUpdateFactory
                                .newLatLngBounds(initialFloor.getBounds(), 4);
                        phunwareMap.getGoogleMap().animateCamera(cameraUpdate);
                    }

If I try to bind this Callback class as normal class, addBuilding method is not visible as it takes generic class as argument.

Request to help me find a way to handle the generic class in metadata.xml.

0条回答
登录 后发表回答