Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.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
Java 使用Android应用程序字符串的第一个字符筛选arraylist_Java_Android - Fatal编程技术网

Java 使用Android应用程序字符串的第一个字符筛选arraylist

Java 使用Android应用程序字符串的第一个字符筛选arraylist,java,android,Java,Android,为了研究android开发,我创建了一个名为“联系人”的android应用程序,它基本上只是一个电话簿。我有一份名、姓和电话号码的联系人名单。我还有一个edittext,用于过滤列表 目前,我可以通过查找包含edittext中输入的字符串的所有条目来过滤列表。例如,我有3个联系人: Jane Doe John Doe John Joseph Smith 如果我输入类似“oe”的内容,列表将返回John Doe和Jane Doe。现在,我希望我可以通过名字的首字母进行过滤,所以如果我输入“js”

为了研究android开发,我创建了一个名为“联系人”的android应用程序,它基本上只是一个电话簿。我有一份名、姓和电话号码的联系人名单。我还有一个edittext,用于过滤列表

目前,我可以通过查找包含edittext中输入的字符串的所有条目来过滤列表。例如,我有3个联系人:

Jane Doe
John Doe
John Joseph Smith
如果我输入类似“oe”的内容,列表将返回John Doe和Jane Doe。现在,我希望我可以通过名字的首字母进行过滤,所以如果我输入“js”或“jojs”,它将返回johnjosephsmith,但我不完全确定如何启动这个实现

我已经覆盖了FilterResults performFiltering,这就是我最终得到的结果:

FilterResults results = new FilterResults();
ArrayList<Contacts> filteredContacts= new ArrayList<Contacts>();

if (constraint!= null && constraint.toString().length() > 0) {
    for (Contacts contact : unfilteredContacts) {
        String firstname = contact.getFirstname();
        String lastname = contact.getLastname();
        String phone = contact.getNumber();

        if (firstname .toLowerCase().contains(constraint.toString().toLowerCase()) ||
                lastname .toLowerCase().contains(constraint.toString().toLowerCase()) ||
                phone .contains(constraint.toString())) {
            filteredContacts.add(contact);
        }
    }

    results.values = filteredContacts;
    results.count = filteredContacts.size();

如果我输入“jd”,它只返回“janedoe”,即使它也应该显示“johndoe”。这是怎么回事?

我会使用空格字符分割输入,并检查结果数组是否大于1。如果是,则存在首字母缩写,因此您必须使用字符串的
startsWith()
方法检查它们

String[] initials = constraint.split(" ");
if (initials.length == 1) {
    //single input, do you 'if' here
} else {
    //initials detected, check every string with 'startsWith()' method
}

“但我有点受不了这个”并不是一个问题的描述。请准确描述哪些工作正常,哪些不正常,哪些错误。如果您得到异常,则还包括堆栈跟踪。如果您想避免循环,则应该考虑实现AN。代码中的TEMP是什么?抱歉,它是CONTEND。我在玩我的代码。谢谢。我用这个逻辑来处理我的代码,但不知怎么的,我的过滤器发生了一些奇怪的事情。我已经更新了我的代码以显示我的附加过滤器。很难说更多,但也许你应该在每个匹配的循环中添加联系人。现在看起来您只添加了第一个。我想这可能是多余的。整个代码段都在for(Contacts-contact:unfilteredContacts)循环中,我只是在我的标志为true时添加contact,但我将尝试更多地使用代码。谢谢你的建议。
String[] initials = constraint.split(" ");
if (initials.length == 1) {
    //single input, do you 'if' here
} else {
    //initials detected, check every string with 'startsWith()' method
}