Как расширить Activity в уже расширенном классе Java

Я разрабатываю приложение AR Android с использованием Metaio. Мне нужно показать некоторые данные, когда реальный объект был отслежен. Для этого я регистрирую обратный вызов, это лучший способ, который я нашел.

К сожалению, чтобы правильно использовать 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 ответ

Решение

Добавить конструктор, который принимает 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()));

Другие вопросы по тегам