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
时,该按钮才会启用

例如,如果在当前活动为另一活动时加载了视频,则该按钮不会启用

MainActivityjava类中的代码:

@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);

}