Java 按钮未启用?
当奖励广告完成加载后,Java 按钮未启用?,java,android,android-activity,Java,Android,Android Activity,当奖励广告完成加载后,mButton应该被启用。 但是,只有当当前活动为MainActivity时,该按钮才会启用 例如,如果在当前活动为另一活动时加载了视频,则该按钮不会启用 MainActivityjava类中的代码: @Override public void onRewardedVideoAdLoaded() { mButton.setEnabled(true); //works only in the MainActivity activity Toast.makeTe
mButton
应该被启用。
但是,只有当当前活动为MainActivity
时,该按钮才会启用
例如,如果在当前活动为另一活动时加载了视频,则该按钮不会启用
MainActivity
java类中的代码:
@Override
public void onRewardedVideoAdLoaded() {
mButton.setEnabled(true); //works only in the MainActivity activity
Toast.makeText(this, "onRewardedVideoAdLoaded", Toast.LENGTH_SHORT).show();
}
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.me.myapplication.MainActivity">
<Button
android:id="@+id/mButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</android.support.constraint.ConstraintLayout>
当我在另一个活动中加载视频时,如何启用
mButton
?这是因为当相应的活动不可见时,您无法更新UI。当执行onRewardedVideoAdLoaded()
时,可以维护一个标志,然后,当MainActivity
被置于前台时,检查标志以启用/禁用按钮。如果您的广告加载到另一个Activity
而不是MainActivity
中,则保存您的状态,例如使用SharedReferences
。您可以使用如下值:1(如果加载了ad)和0(如果未加载ad),并执行如下操作:
如果已加载视频:
PreferenceManager.getDefaultSharedPreferences(this).edit().
putInt("value", 1).apply(); // word value is key
然后覆盖main活动中的onResume
和onStart
,通过从SharedReferences
获取值来加载内部检查,如下所示:
int i = PreferenceManager.getDefaultSharedPreferences(this).
getInt("value", 0).apply(); //0 is default value
if(i == 1){
mButton.setEnabled(true);
}
else
mButton.setEnabled(false);
我希望这会有所帮助。但请注意,SharedReferences
将始终记住该状态,并在下次启动应用程序时启用该按钮,直到用户删除数据或重新安装应用程序。我不知道你想要的是什么,但如果可以的话,每次用户退出应用程序时都可以从SharedReferences
中删除。你需要在onResume()和onRewardedVideoAdLoaded()中添加按钮启用代码
谢谢你的回答。您能给出代码示例吗?我可以给您伪代码:在MainActivity中-静态成员变量-布尔启用按钮;-在onRewardedVideoAdLoaded()中更新此变量-在onResume()中检查其状态-如果为true,请启用按钮。否则禁用。我试过了,但没有任何改变。。。请测试您的代码:)我正在使用谷歌AdMob加载广告。哈哈!我确实测试了我的代码,它可以工作:)。当然,当您退出应用程序时,静态变量将被重置。在这种情况下,您可以使用SharedReferences。但是,如果您正在寻找在应用程序运行时可以工作的东西,则此逻辑可以工作。如果您确定即使在MainActivity不可见的情况下也会执行onRewardedVideoAdLoaded(),则静态逻辑应该可以工作。@Yupi有没有更有效的方法?我发现了问题。我没有将静态添加到布尔值。只是出于好奇,static做什么?static
的意思是-a)对于所有类对象,这个变量只有一个副本。b)通过多次调用保留其值。更多关于static
的信息static
以什么方式解决了我的问题?我不明白。谢谢!:)尝试在调试模式下运行应用程序,无论是否使用static
修改器。在访问变量的onResume()
方法中添加断点,并在这两种情况下检查其状态。您将看到,如果没有static
,当调用onResume()
时,变量将重置为默认状态,即布尔值时的false
。
private long mTimeRemaining;
private Button mTestButton;
private static boolean sEnable;
@Override
public void onResume() {
super.onResume();
mTestButton.setEnabled(sEnable);
....
}
...
@Override
public void onRewardedVideoAdLoaded() {
Toast.makeText(this, "onRewardedVideoAdLoaded", Toast.LENGTH_SHORT).show();
sEnable = true;
mTestButton.setEnabled(sEnable);
}