Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从按钮活动外部定位按钮_Java_Android_Button - Fatal编程技术网

Java 从按钮活动外部定位按钮

Java 从按钮活动外部定位按钮,java,android,button,Java,Android,Button,大家好,我有一个Firebaselistener类,它监听值1。当达到此值时,我希望按钮可以更改。最初,我在我的主要活动中设置了所有这些,使用 if(dls==1){ m.setBackground(getResources().getDrawable(R.drawable.buttonbkground2)); } 在我的主要活动中使用valueEventlistener并侦听值 但是现在我设置了一个类来做同样的事情,我无法从主活动访问按钮ID public class RewardValue

大家好,我有一个Firebaselistener类,它监听值1。当达到此值时,我希望按钮可以更改。最初,我在我的主要活动中设置了所有这些,使用

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....

您需要将按钮作为字段传递给侦听器,无论是在构造它时还是作为setter

这应该起作用:

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) {

}

只需添加到构造函数中

final Button mButton;
final Context mContext;
public RewardValueListener(Context context, Button button) {
    mContext = context;
    mButton = button;
}   
并使用它代替按钮的
findViewById
,以及
mContext.getResources()


注意:当你创建这个类时,你需要有一个可用的按钮

你有一个例子说明你所说的setter是什么意思吗请@MatthewEdited评论并回答。好的观点。你也需要通过抽签。看起来他接受了另一个答案。谢谢@MatthewBahr,但是蟋蟀更有意义,对不起,
视图是什么用于?哈哈,这是代码我试过了,但它不起作用lol只是忘记了删除好吧,如果你保留它并正确使用,
view.findViewById
将是一个选项,这就是为什么我要求用按钮代码定义一个函数,并从listenerused调用该函数正确吗?我刚试过view.findbyId,结果出错了。谢谢@cricket_007,效果不错。我如何重新喜欢getResources()我添加了视图,它使我的应用程序崩溃。我试着改变我按钮的文本,这样代码就正确了。我的观点有问题吗?我需要在什么地方初始化它吗?谢谢cricket,这对同一活动中的多个按钮@cricket\u 007也有效吗?如果你为每个按钮创建一个新的值侦听器,那么是的,在编辑时,
child(“RewardsSystem”)
只能容纳一个侦听器,所以一次又一次地设置它是不正确的,但是你应该在一篇新的帖子中询问这一点