カスタム AutoCompleteTextView を作成する必要があります。アダプターで Unicode 文字を使用していますが、問題は、ユーザーが常に Unicode 文字のキーボードを持っている、または使用しているとは限らないことです。
アイデアは、ユーザーが最初に文字 C を入力したときに、C、Ć、Č で始まるアイテムを提案したいということです。
ユーザーが文字 S を入力すると、S と Š で始まるアイテムを提案したいと思います
これを機能させる方法はありますか?
カスタム AutoCompleteTextView を作成する必要があります。アダプターで Unicode 文字を使用していますが、問題は、ユーザーが常に Unicode 文字のキーボードを持っている、または使用しているとは限らないことです。
アイデアは、ユーザーが最初に文字 C を入力したときに、C、Ć、Č で始まるアイテムを提案したいということです。
ユーザーが文字 S を入力すると、S と Š で始まるアイテムを提案したいと思います
これを機能させる方法はありますか?
私は問題を解決しました:
Unicode 文字列を非 Unicode に変換するこのメソッドを作成しました。
/** Remove HTML constants for unicode chars from string */
public static String convertFromUnicode(String text, Context ctx) {
// Find wrong unicode chars and replace it with non-unicode
text = text.replaceAll(ch, "c");
text = text.replaceAll(zh, "z");
text = text.replaceAll(sh, "s");
text = text.replaceAll(tj, "c");
text = text.replaceAll(Ch, "C");
text = text.replaceAll(Zh, "Z");
text = text.replaceAll(Sh, "S");
text = text.replaceAll(Tj, "C");
text = text.replaceAll(ctx.getResources().getString(R.string.ch), "c");
text = text.replaceAll(ctx.getResources().getString(R.string.zh), "z");
text = text.replaceAll(ctx.getResources().getString(R.string.sh), "s");
text = text.replaceAll(ctx.getResources().getString(R.string.tj), "c");
text = text.replaceAll(ctx.getResources().getString(R.string.Ch), "C");
text = text.replaceAll(ctx.getResources().getString(R.string.Zh), "Z");
text = text.replaceAll(ctx.getResources().getString(R.string.Sh), "S");
text = text.replaceAll(ctx.getResources().getString(R.string.Tj), "C");
return text;
}
および CustomAdaper の performFiltering で:
@Override
protected FilterResults performFiltering(CharSequence constraint) {
if (constraint != null) {
suggestions.clear();
for (String showName : itemsAll) {
String tempshowName = ParserData.convertFromUnicode(showName,
getContext());
String tempContraint = ParserData.convertFromUnicode(
constraint.toString(), getContext());
if (tempshowName.toLowerCase().startsWith(
tempContraint.toString().toLowerCase())) {
suggestions.add(showName);
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = suggestions;
filterResults.count = suggestions.size();
return filterResults;
} else {
return new FilterResults();
}
}
したがって、ユニコードとユニコードではない文字は等しいようです。アイデア @dilix の Tnx。
独自のフィルターを実装して、たとえば、C* 値だけでなく、C*、Ć*、Č* も返すことができます。
ここで見つけることができる独自のフィルターを実装する方法