如何在已扩展的Java类中扩展Activity

时间:2015-07-30 22:28:27

标签: java android-activity callback metaio

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

不幸的是,要正确使用 getFragmentManager(),我需要导入Activity属性,但我不能扩展该类(已经扩展)。

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

这是主要活动中的回调注册:

metaioSDK.registerCallback(new ProvaTracking());

这是跟踪类:

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!!");

            }
        }

    }

}

1 个答案:

答案 0 :(得分:0)

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

所以你要改变你的课程:

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()));

调用它