如何给Interface一个布尔变量?

时间:2016-05-14 18:20:41

标签: java android interface

我的界面就是这个

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

4 个答案:

答案 0 :(得分: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...
}

如果您想使用界面,那可能会怎么做。否则,只需将AndroidStuff设为abstract class

答案 1 :(得分:1)

更新后,将在onComplete()?

中更新的简单静态字段怎么样?
public class AndroidLauncher extends AndroidApplication implements AndroidStuff {

 public static boolean isWatched;

 // on onComplete() set true;
}

答案 2 :(得分:1)

所有接口变量必须是public static和final。所以你无法改变它们。你需要的是一个abstract class

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

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

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

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

然后在像其他类这样的

中检查它
if(AndroidLauncher.isAdShown) ....
  1. 在应用程序类中定义一个接口,为您提供回调:

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

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

答案 3 :(得分: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();
 }
 }