Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android,AutoCompleteTextView,强制从条目列表中删除文本_Android_Validation_Autocompletetextview - Fatal编程技术网

Android,AutoCompleteTextView,强制从条目列表中删除文本

Android,AutoCompleteTextView,强制从条目列表中删除文本,android,validation,autocompletetextview,Android,Validation,Autocompletetextview,有没有办法强制autocompletetextview中的条目成为entrylist中的元素之一 我找到了一个名为“performValidation”的方法,但我不确定它的实际功能,而且我还没有找到太多的文档或示例。自动完成文本视图有一个名为setValidator()的方法,该方法将接口的一个实例AutoCompleteTextView.Validator作为参数AutoCompleteTextView.Validator包含isValid(),您可以使用它检查输入的值,并且可以通过实现fi

有没有办法强制autocompletetextview中的条目成为entrylist中的元素之一


我找到了一个名为“performValidation”的方法,但我不确定它的实际功能,而且我还没有找到太多的文档或示例。

自动完成文本视图有一个名为
setValidator()
的方法,该方法将接口的一个实例
AutoCompleteTextView.Validator
作为参数
AutoCompleteTextView.Validator
包含
isValid()
,您可以使用它检查输入的值,并且可以通过实现
fixText()
来“修复”此字符串

这似乎是使用
AutoCompleteTextView
可以获得的最好结果,因为
AutoCompleteTextView.Validator
的文档说明了以下内容:

“既然没有万无一失的方法 防止用户离开此服务器 视图中的值不正确, 我们所能做的就是设法解决它 当这种情况发生时,我们自己。”

如果元素列表不太长,则最好使用微调器

*******编辑:*********

我为您准备了一个如何使用此功能的快速示例,希望对您有所帮助

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<AutoCompleteTextView  
    android:id="@+id/input"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
<EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Focus me to validate above text"/>
</LinearLayout>

-

公共类AutoCompleteTextViewActivity扩展活动{
String[]validWords=新字符串[]{“,”滑雪板“,”雪橇“,”障碍“};
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AutoCompleteTextView视图=(AutoCompleteTextView)findViewById(R.id.input);
view.setAdapter(新的ArrayAdapter(这个,android.R.layout.simple_下拉列表_项目_1line,validWords));
view.setValidator(newvalidator());
view.setOnFocusChangeListener(新的FocusListener());
}
类验证器实现AutoCompleteTextView.Validator{
@凌驾
公共布尔值isValid(字符序列文本){
Log.v(“测试”,“检查是否有效:”+文本);
Arrays.sort(validWords);
if(Arrays.binarySearch(validWords,text.toString())>0){
返回true;
}
返回false;
}
@凌驾
公共CharSequence fixText(CharSequence invalidText){
Log.v(“测试”,“返回固定文本”);
/*我只是在这里返回一个空字符串,所以字段将被清空,
*但是你可以在这里做任何动作,比如弹出对话框?
* 
*在这里返回的值必须在有效单词列表中。
*/
返回“”;
}
}
类FocusListener实现View.OnFocusChangeListener{
@凌驾
public void onFocusChange(视图v,布尔hasFocus){
Log.v(“测试”,“焦点改变”);
if(v.getId()==R.id.input&&!hasFocus){
Log.v(“测试”、“执行验证”);
((AutoCompleteTextView)v).性能验证();
}
}
}
}
另一种替代方式(注释内联提及):

AutoCompleteTextView txt\u site\u name=findviewbyd(R.id.some\u auto\u text);
//获取国家/地区的字符串数组
String[]countries=getResources().getStringArray(R.array.ncr\u parking\u list\u array);
//创建适配器并将其设置为AutoCompleteTextView
ArrayAdapter=新的ArrayAdapter(getActivity(),android.R.layout.simple\u下拉列表\u项目\u 1行,国家/地区);
//txt_site_name是自动完成文本视图的名称。或自动完成文本视图txt\u站点\u名称
txt_site_name.setAdapter(适配器);
txt\u site\u name.setValidator(新的AutoCompleteTextView.Validator(){
@凌驾
公共布尔值isValid(字符序列文本){
//这里的一些逻辑根据文本是否经过验证返回true或false
if(text==“这就是我想要的”)
返回true;
其他的
返回false;
}
@凌驾
公共CharSequence fixText(CharSequence invalidText){
//如果.isValid()返回false,则代码将显示在这里
//按照您希望的方式修复用户输入并返回它
return“这就是我想要的”
}
});

参考资料:

谢谢。最初我用的是旋转器,但我的用户抱怨说,所以我想我把它改成了ACTV。你有没有参考过使用验证器的例子?我正在努力实现。我给你们举了一个小例子,问问你们是否还有不清楚的地方!很好的例子。。一个明显的改进是,尽管每次调用isValid,但不必对单词进行排序。。可能会保留一个排序的标记即使输入的文本是数组中的文本,Soe上也应该有一个捐赠按钮AutoComplete textview在失去焦点后变为空白。当它再次获得焦点时,它将最后一个选定的项目作为预填充的文本。奇怪的事情发生了:/
public class AutoCompleteTextViewActivity extends Activity {

    String[] validWords = new String[]{"", "snowboard", "bobsleigh", "slalom"};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        AutoCompleteTextView view = (AutoCompleteTextView)findViewById(R.id.input);
        view.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, validWords));
        view.setValidator(new Validator());
        view.setOnFocusChangeListener(new FocusListener());
    }

    class Validator implements AutoCompleteTextView.Validator {

        @Override
        public boolean isValid(CharSequence text) {
            Log.v("Test", "Checking if valid: "+ text);
            Arrays.sort(validWords);
            if (Arrays.binarySearch(validWords, text.toString()) > 0) {
                return true;
            }

            return false;
        }

        @Override
        public CharSequence fixText(CharSequence invalidText) {
            Log.v("Test", "Returning fixed text");

            /* I'm just returning an empty string here, so the field will be blanked,
             * but you could put any kind of action here, like popping up a dialog?
             * 
             * Whatever value you return here must be in the list of valid words.
             */
            return "";
        }
    }

    class FocusListener implements View.OnFocusChangeListener {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            Log.v("Test", "Focus changed");
            if (v.getId() == R.id.input && !hasFocus) {
                Log.v("Test", "Performing validation");
                ((AutoCompleteTextView)v).performValidation();
            }
        }
    }
}
AutoCompleteTextView txt_site_name  = findViewById(R.id.some_auto_text);
// Get the string array for the countries
String[] countries = getResources().getStringArray(R.array.ncr_parking_list_array);
// Create the adapter and set it to the AutoCompleteTextView
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_dropdown_item_1line, countries);
// txt_site_name  is name of the AutoComplete text view. or AutoCompleteTextView txt_site_name
txt_site_name.setAdapter(adapter);

txt_site_name.setValidator(new AutoCompleteTextView.Validator() {
     @Override
     public boolean isValid (CharSequence text){
          //some logic here returns true or false based on if the text is validated
          if(text == "This is what I want") 
              return true;
          else 
              return false;
     }

     @Override
     public CharSequence fixText (CharSequence invalidText){
          //If .isValid() returns false then the code comes here
          //do whatever way you want to fix in the users input and  return it
          return "This is what I want"
            }
        });