2016-05-14 62 views
-1

我的界面是这样的如何给接口一个布尔变量?

public interface AndroidStuff { 

    public void adShower(); 
    public void shareActivity(); 
} 

我需要给它一个boolean watched,而不是将其初始化,然后修改我的主要的Android类,布尔在这里我实现了这个接口,所以我可以检查它是否是假性还是真性从我的非Android类(我使用LibGdx)。

这是AndroidApplication类:

public class AndroidLauncher extends AndroidApplication implements AndroidStuff { 
    @Override 
    protected void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); 
     initialize(new MyGdxGame(this), config); 
     HeyzapAds.start("1",this); 
     IncentivizedAd.fetch(); 
    } 

    @Override 
    public void adShower() { 
     IncentivizedAd.display(this); 
     IncentivizedAd.fetch(); 
     IncentivizedAd.setOnIncentiveResultListener(new HeyzapAds.OnIncentiveResultListener() { 
      @Override 
      public void onComplete(String tag) { 
      } 

      @Override 
      public void onIncomplete(String tag) { 

      } 
     }); 
    } 

    @Override 
    public void shareActivity() { 

    } 

    @Override 
    protected void attachBaseContext(Context base) { 
     super.attachBaseContext(base); 
     MultiDex.install(this); 
    } 
} 

我需要从非Android的类来检查onComplete被调用。

+5

所有的接口变量都是public static和final。所以你不能改变它们。你需要的是一个抽象类 –

+0

但是我不能实现一个抽象类? –

+0

您可以改为扩展抽象类。 – Nathanael

回答

1

你不能把实例变量在Java接口,但是你可以做的是:

public interface AndroidStuff 
{ 
    boolean getWatched(); 
    // Your other methods... 
} 

,然后在你的类实现该接口:

public class ExampleClass implements AndroidStuff 
{ 
    private boolean watched; 
    @Override 
    public boolean getWatched() 
    { 
     return watched; // Or whatever logic you like 
    } 
    // The rest of the class... 
} 

这就是如果你想使用接口你可能会做的。否则,只需使AndroidStuffabstract class即可。

+0

但也要注意Java不允许多重继承,所以如果你把'AndroidStuff'作为一个'抽象类',你的子类将不能继承其他任何东西。 – Patrick

+0

getWatched();做了诡计,我做了同样的事情,但我忘了我不得不返回观看 –

0
public interface AndroidStuff { 

    public void adShower(); 
    public void shareActivity(boolean isChecked); 
} 

那么当你在活动实现它,你会得到这个变量的使用

public class AndroidLauncher extends AndroidApplication implements AndroidStuff { 



@Override 
protected void onCreate (Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); 
    initialize(new MyGdxGame(this), config); 
    HeyzapAds.start("1",this); 
    IncentivizedAd.fetch(); 
    } 

    @Override 
    public void adShower() { 
    IncentivizedAd.display(this); 
    IncentivizedAd.fetch(); 
    IncentivizedAd.setOnIncentiveResultListener(new HeyzapAds.OnIncentiveResultListener() { 
    @Override 
    public void onComplete(String tag) { 
    } 

    @Override 
    public void onIncomplete(String tag) { 

    } 
    }); 
    } 

    @Override 
    public void shareActivity(boolean isChecked) { 
    //here youwill get boolean variable for use 
    } 



@Override 
protected void attachBaseContext(Context base) { 
super.attachBaseContext(base); 
MultiDex.install(this); 
} 

@Override 
protected void onResume() { 
super.onResume(); 
} 
} 
1

更新后,将在onComplete()中更新的简单静态字段呢?

public class AndroidLauncher extends AndroidApplication implements AndroidStuff { 

public static boolean isWatched; 

// on onComplete() set true; 
} 
1

所有的接口变量必须是公共静态的和最终的。所以你不能改变它们。你需要的是一个abstract class

编辑: 在你的情况;你需要从应用程序类中的onComplete回调到其他地方。

有两种可能的解决方案: 1.可以使用静态标志变量这样

public class AndroidLauncher extends AndroidApplication implements AndroidStuff{ 
    public static boolean isAdShown = false; 

....onComplete(){ 
    isAdShown = true; 
    } 
} 

然后内部otherclass检查它像这样

if(AndroidLauncher.isAdShown) .... 
  • 在您的应用程序类中定义一个可让您回调的接口:

    public class AndroidLauncher extends AndroidApplication implements AndroidStuff{ 
        private CallBack callback; 
        public void registerCallBack(Callback callback){ 
         this.callback = callback; 
        } 
        public interface CallBack{ 
         void onAdShown(); 
        } 
    
    } 
    
  • 现在;让其他类注册回调并为该回调提供实现;

    public OtherClass implements AndroidLauncher.CallBack{ 
        public OtherClass(){ 
        instanceOfApplicationClass.registerCallback(this); 
        } 
    
        @Override 
        public void onAdShown(){ 
         //here you get the callback when ad is shown 
        } 
        }