从活动外部找到一个按钮

时间:2017-06-08 01:30:11

标签: java android button

大家好我有Firebaselistener类,它会侦听1.的值当达到此值时,我希望按钮drawable可以更改。最初我在我的主要活动中设置了这一切,并且使用

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

在我的主要活动中使用valueEventlistener并侦听值。

但是现在我已经设置了一个类来做同样的事情我无法从主要活动中访问按钮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;

}

我知道它与调用视图有关,但是我在哪里调用它?

有人可以帮助我告诉我哪里出错了谢谢

***编辑 好的,谢谢@ cricket_007,他的回答非常好。现在我有代码工作就在那里调用我的Listener类来改变我的主要活动中的所有按钮,而不只是一个。

如果对于每个按钮,如果以这种方式编写代码,我可以使它工作但是有一种方法可以压缩它,所以我不必溢出我的主要活动

  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);
  ect ect....

2 个答案:

答案 0 :(得分:2)

只需添加到构造函数中。

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

并使用{而不是findViewById作为按钮,mContext.getResources()

注意:创建此类时,您需要有一个按钮

答案 1 :(得分:-1)

您需要将按钮作为字段传递到侦听器中,无论是构建它还是作为设置器。

这应该有效:

public class RewardValueListener  implements ValueEventListener {

FirebaseAuth mAuth;
String userid;
int i;
View view;
String dls;
Button button;
public RewardValueListener(Button button) {
    this.button = button;
}

@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", "test before if " + dls);
    i = Integer.parseInt(dls);
    if (i==1){

        Log.d("tag", "test after if " + i);
     button.setBackground(getResources().getDrawable(R.drawable.buttonbkground2));

    }
}

@Override
public void onCancelled(FirebaseError firebaseError) {

}