【问题标题】:Subscribe to button click without inline implementation订阅没有内联实现的按钮点击
【发布时间】:2012-09-30 11:21:40
【问题描述】:
public void onCreate(Bundle savedInstanceState) {
    ...
    btn_client_connect.setOnClickListener(new Button.OnClickListener() {
        public void onClick(View v) {
            // inline implementation goes here ...
        }
}

我想将内联实现移动到单独的函数中,保持 onCreate 函数简短易读:

私人无效OnBtnConnectClick(查看v){ // 执行... }

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

btn_client_connect.setOnClickListener(this.OnBtnConnectClick);

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

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

有更好的方法吗?

【问题讨论】:

    标签: java android event-handling


    【解决方案1】:
    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 
        }
    };
    

    【讨论】:

      【解决方案2】:

      方法在 Java 中不是对象,所以你不能这样做。

      您可以做的是创建一个私有内部类(或单独的类,由您决定):

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

      然后做

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

      【讨论】:

        【解决方案3】:

        还有其他方法可以设置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
        
            }
        
        }
        

        【讨论】:

          【解决方案4】:

          如果您是在 XML 中创建布局,那么您可以为 Button 使用 android:onClick 属性。你需要定义一个方法的名字:

          android:onClick="onClick"
          

          并在您的Activity 中实现此方法:

          public void onClick(View v) {
            switch(v.getId()) {
              ...
            }
          }
          

          不需要额外的代码。希望这会有所帮助。

          【讨论】:

            【解决方案5】:

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

            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);
                    }
            }
            

            【讨论】:

              【解决方案6】:

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

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2012-05-11
                • 1970-01-01
                • 2018-03-10
                • 2012-03-25
                • 2021-11-03
                • 1970-01-01
                • 1970-01-01
                • 2019-11-10
                相关资源
                最近更新 更多