java - 从其 Activity 外部定位按钮

标签 java android button

我有 Firebaselistener 类,它监听 1 的值。当达到这个值时,我希望按钮 drawable 发生变化。最初我在我的主要 Activity 中设置了这一切并且它工作正常使用:

if(dls==1){
m.setBackground(getResources().getDrawable(R.drawable.buttonbkground2));
}

在我的主要 Activity 中使用 valueEventlistener 并监听值。

但现在我已经设置了一个类来做同样的事情,但我无法从主要 Activity 中访问按钮 ID。

public class RewardValueListener  implements ValueEventListener {

FirebaseAuth mAuth;
String userid;
int i;
View view;
String dls;
Button mButton;
Context c;

public RewardValueListener() {

}

@Override
public void onDataChange(DataSnapshot dataSnapshot) {

    mAuth = FirebaseAuth.getInstance();
    FirebaseUser user = mAuth.getCurrentUser();
    userid = user.getUid();
    dls = dataSnapshot.child(userid).child("counter").getValue(String.class);
    Log.d("tag", "Value: " + dls);
    i = Integer.parseInt(dls);
    if (i == 1) {

        Log.d("tag", "Congrats " + i);


        mButton.setBackground(c.getResources().getDrawable(R.drawable.buttonbkground2));

    }
}
@Override
public void onCancelled(FirebaseError firebaseError) {

}

***包含蟋蟀答案的代码编辑

  public void getButton(Button button,Context context) {
    mButton = button;
    c=context;
  }

我知道这与调用 View 有关,但我该如何调用它以及在何处调用它?

编辑

感谢@cricket_007 的回答非常有效。现在我的代码可以正常工作,可以调用我的 Listener 类来更改我的主要 Activity 中的所有按钮,而不仅仅是一个按钮。

如果以这种方式编写代码,我可以让每个按钮都工作,但有没有办法压缩它,这样我就不必溢出我的主要 Activity :

  RewardValueListener reward1 = new RewardValueListener();
    mListref.child("RewardsSystem").addValueEventListener(reward1);
    reward1.getButton(mstreaming,mcontext);
    RewardValueListener reward2 = new RewardValueListener();
    mListref.child("RewardsSystem").addValueEventListener(reward2);
    reward2.getButton(mcustom,mcontext);
    RewardValueListener reward3 = new RewardValueListener();
    mListref.child("RewardsSystem").addValueEventListener(reward3);
    reward3.getButton(mlauncher,mcontext);
    RewardValueListener reward4 = new RewardValueListener();
    mListref.child("RewardsSystem").addValueEventListener(reward4);
    reward4.getButton(mmovies,mcontext);
  etc etc...

最佳答案

只需添加到构造函数中。

final Button mButton;
final Context mContext;
public RewardValueListener(Context context, Button button) {
    mContext = context;
    mButton = button;
}   

并使用它代替按钮的 findViewByIdmContext.getResources()

注意:创建此类时需要有一个按钮可用

关于java - 从其 Activity 外部定位按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44425263/

相关文章:

java - "window inside window"与 Swing 和 Netbeans

java - Unity3D - 使用 Gradle 构建 Android AppBundle 失败

android - Flutter,我可以为命名参数传递一个 Map

javascript - 如何不双击 "refresh"div?

javascript - HTML 按钮的点击计数器

java - 没有任何类名的 NoClassDefFoundError

java - ireport 中列表组件的高度

javascript - 用于更改屏幕方向的 phonegap 插件出错

android - BadTokenException 在 ArrayAdapter 添加

html - 如何将按钮链接到另一个页面?