【问题标题】:View concept in onClick event在 onClick 事件中查看概念
【发布时间】:2014-05-21 22:49:25
【问题描述】:

@覆盖 public void onClick(查看 arg0)

在这个......我们引用的视图是什么。它是指相应布局中的所有按钮吗?请详细解释。提前致谢。

【问题讨论】:

    标签: java android


    【解决方案1】:

    onClick 方法的参数是指按下/按下的视图。这可以是 Button、TextView、ImageView 等等。根据文档,特别是这个主题:Responding to Click Events,这个方法必须:

    • 成为公开
    • 返回无效
    • 定义一个视图作为它的唯一参数这将是被点击的视图

    由于您按如下方式调用视图的侦听器:

    textview.setOnClickListener(this);
    

    你将使用这个方法:

    public void onClick(View view) { ... }  
    

    正如我所说,View view 参数指的是先前单击的元素。附加到此侦听器的每个视图都包含在此参数中。

    但是,要知道单击了哪个视图并对其执行一些操作,您可以使用getId() 方法来检索确切的视图:

    @Override
    public void onClick(View view) {
        if(view.getId() == R.id.text1) {
            // do something when textview is clicked
        } else {
            // do something else for all the views attached to this listener...
        }
    }
    

    【讨论】:

      【解决方案2】:

      public void onClick(查看 arg0)

      点击视图时调用。

      参数 arg0 被点击的视图。

      【讨论】:

        【解决方案3】:

        View 参数将是用户正在触摸的视图。因此,您可以从该方法中访问它。你在这里有它的参考http://developer.android.com/reference/android/view/View.OnClickListener.html#onClick(android.view.View)

        【讨论】:

          【解决方案4】:

          您部分正确,此视图表示上下文中的布局,但此 onClick 如此通用的所有目的是您不必为视图中的每个按钮编写 onClick,您可以像这样在单击侦听器上设置按钮和

          btn1.setOnClickListener(this);
          btn2.setOnClickListener(this);
          btn3.setOnClickListener(this);
          

          这样称呼

          @Override
           public void onClick(View v) 
          {
             // TODO Auto-generated method stub
             if(v == btn1)
             {
              //Things to do  
             }
             if(v == btn2)
             {
              //Things to do      
             }
             if(v == btn3)
             {
              //Things to do  
             } 
          }
          

          而不是做这样的事情

          private OnClickListener button1ClickListener = new View.OnClickListener()
          {
           @Override
           public void onClick(View arg0) {
              **Button button = (Button)findViewById(R.id.button1);**
              handleButtonClick(button);
          }
          };
          
          private OnClickListener button2ClickListener = new View.OnClickListener() {
          @Override
          public void onClick(View arg0) {
              **Button button = (Button)findViewById(R.id.button2);**
              handleButtonClick(button);
          
          }
          };
          
          private OnClickListener button3ClickListener = new View.OnClickListener() {
          @Override
          public void onClick(View arg0) {
              **Button button = (Button)findViewById(R.id.button3);**
              handleButtonClick(button);
          
          }
          };
          
          private OnClickListener button4ClickListener = new View.OnClickListener() {
          @Override
          public void onClick(View arg0) {
              **Button button = (Button)findViewById(R.id.button4);**
              handleButtonClick(button);
          
          }
          };
          

          【讨论】:

            【解决方案5】:

            正如其他人所说,传递给回调的视图是对被点击视图的引用。您可以使用相同的onClick 方法拥有多个按钮。所以要做的一件有用的事情是:

            public void onClick(View view)
            {
                switch(view.getId())
                {
                    case R.id.my_cool_button:
                        //do some cool stuff
                        break;
                    default:
                        //who knows what button was pressed
                 }
            }
            

            【讨论】:

              【解决方案6】:

              这是 View 类的公共方法。如果你的类实现了 OnClickListener,你可以使用这样的东西(例如在你的 Activity 的 onCreate 方法中):

              Button yourButton = (Button) findViewById(R.id.your_button_id);
              yourButton.setOnClickListener(this);
              

              为 yourButton 设置一个点击监听器。在这种情况下,当您单击 yourButton 时,onClick 中的视图 arg0 将是 yourButton。在 onClick 你可以这样做:

              switch(arg0.getId()){
                  case R.id.your_button_id:
                      // do stuff
                     break;
                  //repeat for other buttons
              }
              

              这允许您在类中为多个按钮设置点击侦听器。您所要做的就是将单击侦听器上的类设置为按钮,就像为 yourButton 所做的那样。

              【讨论】:

                猜你喜欢
                • 2012-09-27
                • 2011-07-24
                • 1970-01-01
                • 2013-03-21
                • 1970-01-01
                • 2013-03-13
                • 2020-11-29
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多