我有 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;
}
并使用它代替按钮的 findViewById
和 mContext.getResources()
注意:创建此类时需要有一个按钮可用
关于java - 从其 Activity 外部定位按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44425263/