如何在已经扩展的 Java class 中扩展 Activity

How to extend Activity in a Java class already extended

我正在使用 Metaio 开发 AR Android 应用程序。当一个真实的物体被跟踪时,我需要显示一些数据。为此,我注册了一个回调,这是我找到的最好的方法。

不幸的是,为了正确使用 getFragmentManager(),我需要导入 Activity 属性,但我无法扩展 class(已经扩展)。

我认为 getContext 是正确的方法,但我不知道如何实现它。

这是main中的回调寄存器activity:

metaioSDK.registerCallback(new ProvaTracking());

这是跟踪 class:

package com.metaio.Example;

import android.annotation.TargetApi;
import android.os.Build;
import android.util.Log;

import com.metaio.sdk.jni.IMetaioSDKCallback;
import com.metaio.sdk.jni.TrackingValues;
import com.metaio.sdk.jni.TrackingValuesVector;

public class ProvaTracking extends IMetaioSDKCallback {

    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    @Override
    public void onTrackingEvent(TrackingValuesVector trackingValuesVector) {
        super.onTrackingEvent(trackingValuesVector);

        for (int i=0; i<trackingValuesVector.size(); i++)
        {
            final TrackingValues v = trackingValuesVector.get(i);
            if (v.isTrackingState())
            {
                TestFragment trendsFragment = new TestFragment();
                getFragmentManager().beginTransaction().add(android.R.id.content, trendsFragment).commit();

                Log.d("Alessandro", "Works!!");

            }
        }

    }

}

添加接受 Context 的构造函数(请注意,您需要 Activity 上下文,而不是应用程序上下文)

因此您可以将 class 更改为:

public class ProvaTracking extends IMetaioSDKCallback {
    private Contect mCtx;    

    public ProvaTracking(Context context) {
        mCtx = context;
    }

    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    @Override
    public void onTrackingEvent(TrackingValuesVector trackingValuesVector) {
        super.onTrackingEvent(trackingValuesVector);

        for (int i=0; i<trackingValuesVector.size(); i++)
        {
            final TrackingValues v = trackingValuesVector.get(i);
            if (v.isTrackingState())
            {
                TestFragment trendsFragment = new TestFragment();

                if (mCtx instanceof Activity)
                    ((Activity) mCtx).getFragmentManager().beginTransaction().add(android.R.id.content, trendsFragment).commit();

                Log.d("Alessandro", "Works!!");

            }
        }

    }

}

然后用metaioSDK.registerCallback(new ProvaTracking(getContext()));

调用它