更简单的OnClickListener?

时间:2014-12-06 18:30:27

标签: android button onclicklistener anonymous

我是新手并且在学习,我已经检查了很多相关的帖子但是我的下面几个问题仍未得到解答... [编辑]语言是java ...

以下是处理点击按钮的方法,但任何人都可以解释

  • 1,为什么我必须声明匿名类,
  • 2,我怎么知道我必须在这里或其他任何地方宣布匿名课程?
  • 3,为什么我不能使用简单的btn.setOnClickListener();为什么我必须在这里打电话给匿名课...下面这行很简单...... !!

    btn.setOnClickListener();

为什么再制作两行代码......?即

@override public void onClick (View v) {....}

======================

Button btnCount = (Button) findViewById(R.id.btnCountId);
btnCount.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) { ...... }
});

2 个答案:

答案 0 :(得分:0)

当您“设置onClickListener”时,您正在做的是告诉:“单击此按钮时,请执行此代码”。

要执行的代码在提供的匿名函数中实现。

您不能简单地在没有参数的情况下执行btn.setOnClickListener(),因为这不会提供有关单击按钮时要执行的行为的信息。

答案 1 :(得分:0)

您正在使用名为" interface"。

的Java实体

View.setOnClickListener接受" OnClickListener"类型的对象。所以你首先需要创建一个这种类型的对象。

对象OnClickListener确实是interface,其中包含一个函数" onClick",因此要创建该类型的对象,您需要实现它(定义界面中的所有功能) - 在这种情况下,只有一个。

OnClickListener myClickListener=new OnClickListener() {
   @Override // override means you are implementing a function in the interface or a derived class
   public void OnClick(View v) {
        // the button has been pressed
   }
};

然后您可以将其分配给视图:

myButton.setOnClickListener(myClickListener);

或许多观点:

myButton1.setOnClickListener(myClickListener);
myButton2.setOnClickListener(myClickListener);
myButton3.setOnClickListener(myClickListener);

在Java中,您会发现对象使用侦听器接口来传递事件。 请注意,更复杂的对象使用的界面可以有多种方法而不只是一种,当您看到的简化不那么方便时。

想象一个对象" Girl"有方法" flirt"你可以援她问她吃饭。女孩需要一些时间来决定,然后用相同的界面传达很多可能的答案之一。

OnGirlFlirtListener  myGirlFlirtListener=new OnGirlFlirtListener() {

   @Override
   public void onGirlSaidYes() {
       // invite the girl to have dinner
   }

   @Override
   public void onGirlSaidNo() {
       // find another girl or hang with your mates instead
   }
   @Override
   public void onGirlSaidMaybe() {
       // ask her later
   }
   @Override
   public void onParentsHateMe() {
       // forget about that girl
   }

}

然后你可以这样做:

mGirl.flirt (myGirlFlirtListener);

代码确实优雅:通过一个界面,您可以控制所有可能的答案!对于java(和Android)中的很多对象来说都是一样的。

当然,如果你不能重复使用它,你可以将它创建为匿名类,而不是将侦听器创建为对象并进行设置。

修改

如何创建通用clicklistener?

有时,在同一个对话框中,您有15个或20个按钮或多或少相同,只是细节不同。虽然你可以完全克制20个clicklisteners,但是利用View.setTag()功能可以更酷。

setTag允许您将任意对象存储到任何视图。您可以使用它在clicklistener中区分按下哪个按钮。

所以想象你有5个按钮:Brian,Peter,Loise,Krasty和Sue:

mButtonPeter.setTag("Peter Griffin");
mButtonLouise.setTag("Louise Griffin");
mButtonBrian.setTag("Brian");
mButtonKrasty.setTag("Krasty");
mButtonSue.setTag("Sue");

OnClickListener personClickListener=new OnClickListener() {

    @Override
    public void OnClick(View buttonPressed) {

       String person=(String)(buttonPressed.getTag());
       // you pressed button "person"
       Toast.makeText(buttonPressed.getContext(), "Hey, "+person+", how is it going!!", Toast.LENGTH_SHORT).show();
    }   
};

mButtonPeter.setOnClickListener(personClickListener);
mButtonLouise.setOnClickListener(personClickListener);
mButtonBrian.setOnClickListener(personClickListener);
mButtonKrasty.setOnClickListener(personClickListener);
mButtonSue.setOnClickListener(personClickListener);

不是很酷吗?