0

我正在使用 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!!");

            }
        }

    }

}
4

1 回答 1

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

于 2015-07-30T22:38:24.940 回答