如何在已经扩展的 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()));
调用它
我正在使用 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()));