订阅按钮单击没有内联实现

时间:2012-09-30 11:21:40

标签: java android event-handling

public void onCreate(Bundle savedInstanceState) {
    ...
    btn_client_connect.setOnClickListener(new Button.OnClickListener() {
        public void onClick(View v) {
            // inline implementation goes here ...
        }
}

我想将内联实现移到单独的函数中,使onCreate函数保持简洁和可读:

    private void OnBtnConnectClick(View v) {
        // implementation...
    }

现在我需要使用以下内容订阅按钮点击:

btn_client_connect.setOnClickListener(this.OnBtnConnectClick);

但这不是编译的。我只有这个丑陋的解决方案:

btn_client_connect.setOnClickListener(new Button.OnClickListener() 
{
    public void onClick(View v) 
    {
        OnBtnConnectClick(v);
    }
});

有更好的方法吗?

6 个答案:

答案 0 :(得分:3)

protected void onCreate(Bundle bundle){
   btn = findview....
   btn.setOnClickListener(buttonClcikListener);
}



private View.OnClickListener buttonClcikListener = new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // your code here 
    }
};

答案 1 :(得分:2)

方法不是Java中的对象,因此您无法执行此操作。

你可以做的是创建一个私有的内部类(或一个单独的类,这取决于你):

private class MyListener implements OnClickListener {
    public void onClick(View v) 
    {
        OnBtnConnectClick(v);
    }
}

然后再做

this.onBtnConnectClick = new MyListener();
btn_client_connect.setOnClickListener(this.onBtnConnectClick);

答案 2 :(得分:1)

如果您使用XML创建布局,则可以使用android:onClick的{​​{1}}属性。您需要定义方法的名称:

Button

并在android:onClick="onClick"

中实施此方法
Activity

无需额外代码。希望这会有所帮助。

答案 3 :(得分:1)

有几种方法可以做到这一点:

btn_client_connect.setOnClickListener(getButtonListener());

然后那个方法看起来像:

public OnClickListener getButtonListener(){
    return new OnClickListener() {
        public void onClick(View v) {
            // inline implementation goes here ...
            OnBtnConnectClick(v);
        }
}

或另一种方式:

btn_client_connect.setOnClickListener(new SomeButtonListener());

然后那个类看起来像:

public (or private) class SomeButtonListener implements OnClickListener {
     public void onClick(View v) {
            // inline implementation goes here ...
            OnBtnConnectClick(v);
        }
}

答案 4 :(得分:1)

还有其他方法可以将Click Listeners设置为一个

只需输入xml

即可

android:onClick="OnBtnConnectClick"

和其他Keppil建议

myButton.setOnClickListener(new myClickListener());

public class myClickListener implements OnClickListener {

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub

    }

}

答案 5 :(得分:0)

您可以定义点击按钮(或视图)在XML中执行的Method

了解更多http://smartcloudblog.blogspot.com/2011/09/android-onclicklisteners-vs.html