我的页面中有多个EditText
以及两个按钮。我希望用户触摸任意一个EditText
字段,然后点击任意按钮,将特定值插入到他触摸的EditText
字段中。不允许使用键盘输入。请帮我这样做。
答案 0 :(得分:51)
您可以使用View.OnFocusChangeListener
来检测是否有任何视图(edittext)获得或失去焦点。
for (EditText view : editList){
view.setOnFocusChangeListener(focusListener);
}
....
private OnFocusChangeListener focusListener = new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus){
focusedView = v;
} else {
focusedView = null;
}
}
}
这可以在您的活动或片段中或您拥有EditTexts的任何位置。 ....
只是说你可以把它放在课堂上的任何其他地方。显然你需要在其中创建一个数组,即editList
。
答案 1 :(得分:29)
这对我有用。它返回一个布尔值。
SELECT *
FROM com140 cm
WHERE cm.csnstar = 90
AND ((cm.csnrsncde IN ( 135, 177 )
AND cm.duedate > (SELECT Max(e.dte1)
FROM events e
WHERE e.ispec = 'FI560'
AND e.inrtyp = 'RVP'
AND e.trntyp1 = 'RP'
AND e.staevt = 55
AND e.dte2 > DATE_1) )
OR (cm.csnrsncde IN (91,98,172)
AND cm.duedate > DATE1))
答案 2 :(得分:19)
您可以做的一件事是声明一个全局变量evalue
,它会使用last selected EditText
然后根据onTouchListener
的值告诉您哪个是evalue
,您可以通过按钮单击将文本值设置为edittext。希望你明白。
它的代码如下:
EditText e1,e2;
Button b1,b2;
String evalue;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
e1=(EditText)findViewById(R.id.editText1);
e2=(EditText)findViewById(R.id.editText2);
b1=(Button)findViewById(R.id.button1);
b2=(Button)findViewById(R.id.button2);
e1.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View arg0, MotionEvent arg1)
{
evalue="1";
return false;
}
});
e2.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View arg0, MotionEvent arg1)
{
evalue="2";
return false;
}
});
b1.setOnClickListener(new View.OnClickListener()
{
public void onClick(View arg0) {
if(evalue=="1")
{
e1.setText("yes");
}
if(evalue=="2")
{
e2.setText("yes");
}
}
});
b2.setOnClickListener(new View.OnClickListener()
{
public void onClick(View arg0) {
if(evalue=="1")
{
e1.setText("No");
}
if(evalue=="2")
{
e2.setText("No");
}
}
});
}
它是一个逻辑编码..没有达到标记..如果你找到一个更好的。然后使用它。谢谢。
答案 3 :(得分:7)
让您Fragment
实施OnTouchListener
& OnFocusChangeListener
:
public class AttributesFragment extends Fragment
implements OnTouchListener, OnFocusChangeListener {
然后使用:
实现@Override
public boolean onTouch(View view, MotionEvent event) {
if (view instanceof EditText) {
view.setOnFocusChangeListener(this); // User touched edittext
}
return false;
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
}
创建EditText
editText.setOnTouchListener(this);
这样,如果默认情况下关注EditText
框,但用户未更改字段,则不会触发onFocusChange
事件。
答案 4 :(得分:3)
这对我有用。
e1 = (EditText) findViewById(R.id.editText1);
e1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View arg0, boolean hasfocus) {
if (hasfocus) {
Log.e("TAG", "e1 focused")
} else {
Log.e("TAG", "e1 not focused")
}
}
});
答案 5 :(得分:1)
这对我使用 Java 8 (lambdas) 有用:
EditText myEditText = findViewById(R.id.editText);
myEditText.setOnFocusChangeListener((view, hasFocus) -> {
if(hasFocus){
Log.e("TAG", "myEditext has focus")
}else{
Log.e("TAG", "myEditext has no focus")
}
});
答案 6 :(得分:0)
在您的活动或片段实现OnFocusChangeListener中。
edittextNeme= (EditText) findViewById(R.id.edittextNeme);
edittextNeme.setOnFocusChangeListener(this);
您必须通过view.getId()获取视图ID来检查哪个视图已更改焦点,并相应地处理。
@Override
public void onFocusChange(View view, boolean hasfocus) {
switch(view.getId()){
case R.id.edittextNeme:
//Do something
break;
...etc
}
}
答案 7 :(得分:0)
使用Java 8 lambda:
EditText editTextTo = findViewById(R.id.editTextTo);
editTextTo.setOnFocusChangeListener((view, b) -> {
if (view.isFocused()) {
// Do whatever you want when the EditText is focused
// Example:
editTextFrom.setText("Focused!");
}
});
请注意,lambda函数内部的视图实际上是EditText的实例。
答案 8 :(得分:0)
简单编码:
if(EditText1.isFocused()){
//EditText1 is focused
}else if(EditText2.isFocused()){
//EditText2 is focused
}