捕获EditText失去焦点

时间:2011-06-01 03:46:03

标签: java android android-edittext

我是一名长期,自学成才的业余VB程序员,现在正在尝试自学Java和Android。我这样说,所以你会知道我不会说好语言,对这两种追求都是非常新的。

我开发了一个Android表单,其中包含一系列EditText框,每个用户填写后我希望保存到数组中的内容。如果用户按下该框,我已经想出了如何做到这一点。回车键。但是,人们实际上并没有这样做:他们点击框,键入,然后单击下一个元素。

我是VB,我可以为lostfocus事件编写代码。但我在Java中找不到类似的方法。

最后一个问题:是否有一种方法可以捕获EditText失去焦点的时间,因此我可以在不依赖Enter键的情况下保存该类型的类型数据?

public boolean onKey(View v, int keyCode, KeyEvent event) { 
    if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)){ 
        Editable wasted=edittext_asset.getText(); 
        vehdata[vehNo][Integer.parseInt((String) edittext_asset.getTag())]=wasted.toString(); 
        return true; 
    } 
    return false; 
} 

请记住,我对此很新,我常常不确定在哪里放置代码片段以使它们工作(新文件?oncreate方法?谁知道)。您可以给予我任何指导,我将非常感激和永远感激。

2 个答案:

答案 0 :(得分:6)

让我们按部分去做:

  • “我可以为lostfocus事件编写代码。但我在Java中找不到类似的方法。”:看一下OnFocusChangeListener API
  • “有没有办法在EditText失去焦点时捕获”:是的,使用上面的监听器和abstract void onFocusChange(View v, boolean hasFocus)
  • “请记住,我对此很陌生”:我们在某些时候都是新来的:)如果你是尊重的,并回馈社区(通过回答,或者简单地向上/向下投票,接受答案),没什么可担心的。

然后是一些:

我是一个自学者,所以我现在感受到你的痛苦,现在你想开始使用android时我想给你一些建议:你添加了两个标签:。用于桌面的java编码与为Android设备编码完全不同,因此请考虑到这一点。你真的要用java编写代码还是只用android代码?除了API中的一些明显差异外,主要区别在于用户交互。大多数java程序都需要全键盘和静态屏幕,而Android应用依赖于触摸,这是一个关键的区别。

触摸非常重要,因为通常在没有其他视图的焦点增益的情况下不会失去焦点。一个典型的EditText将在IME上用手指填充,并且View将保持焦点,直到同一个手指触及另一个View(可能是EditText,可能是一个Button)。 “窗口”外通常没有点击。

另一方面,在Android设备中,您期望单个用户,而不是桌面上未知数量的用户。因此,保存数据并检索数据的处理方式完全不同(例如,参见Saving Android Activity state using Save Instance State

您可以选择捕获焦点的获得/失去以执行操作,或者等到单击按钮,或者甚至使用其他方法(例如TextWatcher来保存每个字符输入上的数据)。因此,您有很多选项来设计您的应用。困难的部分是巧妙地设计。

祝你好运!

答案 1 :(得分:1)

我刚刚做了类似的事情。我通过创建一个for循环来处理它,它只是通过id获取每个edittext的内容并将它的文本添加到数组中。我在onclick方法中这样做了,因为我在用户点击按钮后完成了所有操作。

String ohhai;
String duh = et.getText().toString();
int number = Integer.parseInt(duh);
List<String> myCollection=new ArrayList<String>();
EditText stuff;
int editt;
String loggy;
for(int z = 0; z < number; z++){
    stuff = (EditText)findViewById(z);
    editt = stuff.getId();
    loggy = Integer.toString(editt);
    Log.e("How Many", loggy);
    ohhai = stuff.getText().toString();
    myCollection.add(ohhai);
}

String [] arr = myCollection.toArray(new String[myCollection.size()]);
String separator = "0";
StringBuffer result = new StringBuffer();
if (arr.length > 0) 
   result.append(arr[0]);
for (int h=1; h < arr.length; h++) {
    result.append(separator);
    result.append(arr[h]);
}