繁体   English   中英

我如何给接口一个布尔变量?

[英]How can I give Interface a boolean variable?

我的界面是这个

public interface AndroidStuff {

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

我需要给它一个boolean watchedboolean watched而不是对其进行初始化,然后在实现此接口的主要Android类中修改该布尔值,以便可以从非Android类中检查它是否为false或true(我正在使用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

您不能将实例变量放在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

更新后,将在onComplete()中更新的简单静态字段如何处理?

public class AndroidLauncher extends AndroidApplication implements AndroidStuff {

 public static boolean isWatched;

 // on onComplete() set true;
}

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

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

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

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

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

然后像这样在otherclass里面检查

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

现在; 让您的其他类注册回调并提供该回调的实现;

    public OtherClass implements AndroidLauncher.CallBack{
    public OtherClass(){
     instanceOfApplicationClass.registerCallback(this);
    }

     @Override
     public void onAdShown(){
       //here you get the callback when ad is shown
     }
    }
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();
 }
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM