Java autoCompleteTextView仅在删除字母后显示结果

Java autoCompleteTextView仅在删除字母后显示结果,java,android,autocompletetextview,Java,Android,Autocompletetextview,我创建了一个布局,其中有一个autoCompleteTextView,应该会显示一些书名 我注意到它在某些情况下不会显示结果,除非我删除一个字母,然后显示正确的结果 例如,我有一个数组字符串,其中包含单词Potter 键入Potter时,不会显示任何结果: 然而,如果我删除一个字母,它会突然显示: im用于填充列表的代码为: atv_Search.addTextChangedListener( new TextWatcher() { @Override public voi

我创建了一个布局,其中有一个
autoCompleteTextView
,应该会显示一些书名

我注意到它在某些情况下不会显示结果,除非我删除一个字母,然后显示正确的结果

例如,我有一个数组字符串,其中包含单词Potter

键入Potter时,不会显示任何结果:

然而,如果我删除一个字母,它会突然显示:

im用于填充列表的代码为:

atv_Search.addTextChangedListener( new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {


        if (s.length() > 0) {

            SOME CODE TO GET NAMES

        }
    }


    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void afterTextChanged(Editable s) {

        Set<String> set = new LinkedHashSet<>( autoBookNames );
        autoBookNames.clear();
        autoBookNames.addAll( set );
        
        // UNTIL THIS POINT IT ALL WORKS GOOD AND I SEE THAT authBookNames IS NOT EMPTY, YET NOT SHOWING UNTIL DELETE

        listAutoAdapter = new ArrayAdapter<String>( getApplicationContext(), R.layout.item_auto_search, autoBookNames );
        atv_Search.setThreshold( 1 );
        atv_Search.setAdapter( listAutoAdapter );

    }
} );
atv_Search.addTextChangedListener(新的TextWatcher(){ @凌驾 public void onTextChanged(字符序列、int start、int before、int count){ 如果(s.长度()>0){ 一些获取名字的代码 } } @凌驾 更改前文本之前的公共void(字符序列s、int start、int count、int after){ } @凌驾 公共无效后文本已更改(可编辑){ Set Set=新的LinkedHashSet(自动书店); 自动书店; 自动售检票机。自动售检票机(套); //在这一点之前,一切都很好,我看到authBookNames不是空的,直到删除才显示 listAutoAdapter=new ArrayAdapter(getApplicationContext(),R.layout.item\u auto\u search,autoBookNames); atv_搜索设置阈值(1); atv_Search.setAdapter(listAutoAdapter); } } ); 正如我在调试代码时所写的那样,即使在删除之前,我也得到了所有的结果,但出于某种原因,它没有显示出来

有什么原因吗?我的意思是,大多数用户不会想删除一封信来显示结果


谢谢

您是否认为“获取名称的某些代码”中比较字符串的索引是错误的(例如最后一个索引小于正确的1个字符)

请尝试==>

listAutoAdapter = new ArrayAdapter<String>( getApplicationContext(), R.layout.item_auto_search, autoBookNames );
    atv_Search.setAdapter( listAutoAdapter );

 atv_Search.addTextChangedListener( new TextWatcher() {

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {

 listAutoAdapter.getFilter().filter(s);  

}


@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void afterTextChanged(Editable s) {


    

}
} );
listAutoAdapter=newarrayadapter(getApplicationContext(),R.layout.item\u auto\u search,autoBookNames);
atv_Search.setAdapter(listAutoAdapter);
atv_Search.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
listAutoAdapter.getFilter().filter;
}
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
@凌驾
公共无效后文本已更改(可编辑){
}
} );
让我知道这是否有效移动

  listAutoAdapter = new ArrayAdapter<String>( getApplicationContext(), R.layout.item_auto_search, autoBookNames );
        atv_Search.setThreshold( 1 );
        atv_Search.setAdapter( listAutoAdapter );
listAutoAdapter=newarrayadapter(getApplicationContext(),R.layout.item\u auto\u search,autoBookNames);
atv_搜索设置阈值(1);
atv_Search.setAdapter(listAutoAdapter);

改成文本,再试一次,本

不,都测试过了。问题在下拉列表中的某个地方,因为我通过的列表肯定是正确的。下面3个解决方案对你不起作用???工作和其他你知道的东西…让我先回到我的电脑上检查一下!我第一次在PostextChanged中初始化listAutoAdapter,因此当我尝试您的解决方案时,我尝试在空对象引用上调用虚拟方法“android.widget.Filter android.widget.ArrayAdapter.getFilter()”,但当我在PostextChanged中使用它时,它成功了。非常感谢。