【问题标题】:ClickListener current targetClickListener 当前目标
【发布时间】:2011-06-21 17:19:11
【问题描述】:
EditText etHomePhone = (EditText)findViewById(R.id.et_pi_home_phone);
EditText etMobilePhone = (EditText)findViewById(R.id.et_pi_home_phone);

etHomePhone.setOnClickListener(showPopUpClickListener);
etMobilePhone.setOnClickListener(showPopUpClickListener);


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

            public void onClick(View v) {

              /* I like to get both EditText.getText().toString() value in this one ClickListener 
 is it Possible, there is something in ActionScript call event.currentTarget...
*/  

            }
        };

【问题讨论】:

    标签: android event-handling listener


    【解决方案1】:

    这是一个 sn-p,所以我看不到上下文,但您可以构造一个 OnClickListener 来捕获活动中的所有事件。首先,您的 Activity 需要实现 OnClickListener 接口:

    public class YourActivity extends Activity implements OnClickListener {...
    

    在 OnCreate() 方法中,注册每个应该响应点击的 UI 元素,如下所示:

    yourObject.setOnClickListener(this);
    

    接下来,对于 Activity 的 onClick() 方法,使用 R.id 创建一个开关结构,如下所示:

    @Override
    public void onClick(View view) {
       switch(view.getId()){
       case R.id.A_UI_Element:
          //do what you need for this element
          break:
       case R.id.A_Different_UI_Element:
          //do what you need for this element
          break;
       //continue with cases for each element you want to be clickable
       }
    }
    

    不要忘记每个案例结束时的休息时间。

    我在您的代码中注意到一件事:两个 editText 声明都引用了相同的资源。这为您提供了同一个 UI 元素的两个句柄,而不是 2 个不同的元素。

    【讨论】:

    • 也感谢您的回复,是的,我的 editText 引用了错误类型的相同资源,实际上不是。
    【解决方案2】:

    如果您将您的 etHomePhone 和 etMobilePhone 变量声明为 final,并在同一方法中内联定义您的 OnClickListener,那么您可以直接引用这些变量。像这样:

    final EditText etHomePhone = (EditText)findViewById(R.id.et_pi_home_phone);
    final EditText etMobilePhone = (EditText)findViewById(R.id.et_pi_home_phone);
    
    View.OnClickListener showPopUpClickListener = new View.OnClickListener() {
    
        public void onClick(View v) {
            String home = etHomePhone.getText().toString();
            String mobile = etMobilePhone.getText().toString();
            // Do something with home and mobile
        }
    };
    
    etHomePhone.setOnClickListener(showPopUpClickListener);
    etMobilePhone.setOnClickListener(showPopUpClickListener);
    

    编辑:

    如果您只想获取被点击的 EditText 的文本而不是两者,那么您只需投射它通过 onClick(View v) 传递的视图:

    public void onClick(View v) {
        EditText editText = (EditText)v;
        String phoneNumber = editText.getText().toString();
        // Do something with phoneNumber
    }
    

    【讨论】:

    • 对不起,我想我没有让你明白我想要什么,我想要类似.... String home or mobile = EditText 的值,它现在正在调用这个监听器。
    • 澄清一下,我以为你想同时在方法中获取它们。你想只获取被点击的文本吗?如果是这样,我已经用解决方案编辑了上面的帖子。
    • 这就是我想要的,谢谢 :)
    • 我还有一个问题,如果你有时间可以看看,谢谢stackoverflow.com/questions/4904551/…
    猜你喜欢
    • 1970-01-01
    • 2011-04-21
    • 2023-02-17
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    相关资源
    最近更新 更多