2014-01-16 38 views
5

我在我的Android活动必须点击两次调用EditText上的Android

  <EditText 
      android:id="@+id/payment_expiration" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/payment_expiration_label" 
      android:layout_centerHorizontal="true" 
      android:layout_marginLeft="25dp" 
      android:layout_marginRight="25dp" 
      android:clickable="true" 
      android:onClick="update_expiration_date" 
      android:editable="false" 
      android:layout_marginTop="-4dp" 
      android:cursorVisible="false" 
      android:maxLength="7" 
      android:padding="10dp" 
      android:textSize="13dp" /> 

有这个EDITTEXT一个onclick方法,你可以看到当

用户点击我把这个方法,它推出一个datePickerDialog:

public void update_expiration_date(View v){ 
    Log.i("","cliqué"); 
    picker.show(); 
    can_update_expiration_date = true; 

} 

我encouter的问题是:在第一时间就在我打开这个活动,用户必须点击两次启动对话框

但在那之后,点击就足够

我怎么能解决这个问题

+0

你的onClick监听器在哪里?你有什么?你在哪里以及如何定义选取器?请分享您的代码。 – ayorhan

+0

也许我对这个类似问题的回答可能有所帮助:http://stackoverflow.com/a/42092582/1617737 –

回答

13

检查Similar Question

“第一次单击只是将焦点设置到文本框,然后第二次点击实际上得到处理作为点击。 “

尝试设置android:focusable="false"

+0

谢谢hypd09,这是问题 – begiPass

+0

嗨,begiPass解决方案的工作原理,但有一个更好的。 –

0

你可以尝试可对焦的解决方案,或者只是添加状态跟踪变量...

public class YourActivity extends Activity { 

private boolean clicked; 

protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    clicked = false; 
} 

public void update_expiration_date(View v){ 
    if(clicked == false){ 
     clicked = true; 
     return; 
    } else { 

    Log.i("","cliqué"); 
    picker.show(); 
    can_update_expiration_date = true; 
    } 

} 

} 
0

begiPass解决方案的工作,但有一个更好的。

随着focusable false用户永远不会看不到哪个编辑文本被选中

更好的解决方案是使用onTouchListener。 le code:

edit.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       edit.setText(""); 
       v.setOnTouchListener(null); 
       return false; 
      } 
    }); 

不要忘记将OnTouchListener设置为null。我们只想清除提示(只有一次)。

问候!

相关问题