0

カスタム AutoCompleteTextView を作成する必要があります。アダプターで Unicode 文字を使用していますが、問題は、ユーザーが常に Unicode 文字のキーボードを持っている、または使用しているとは限らないことです。

アイデアは、ユーザーが最初に文字 C を入力したときに、C、Ć、Č で始まるアイテムを提案したいということです。

ユーザーが文字 S を入力すると、S と Š で始まるアイテムを提案したいと思います

これを機能させる方法はありますか?

4

3 に答える 3

0

私は問題を解決しました:

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。

于 2012-12-13T09:19:06.797 に答える
0

標準の Android検索インターフェイスを実装しようとしましたが、ICU トークナイザーでの提案に FTS3/4 テーブルを使用しましか?

まだ Unicode 検索を実装していませんが、ICU トークナイザーを使用するとうまくいくかもしれません。たぶん、それを試した人がこの答えにコメントできますか?

于 2012-12-13T08:55:16.960 に答える
0

独自のフィルターを実装して、たとえば、C* 値だけでなく、C*、Ć*、Č* も返すことができます。

ここで見つけることができる独自のフィルターを実装する方法

カスタム アダプタ フィルタリングを使用した Android AutoCompleteTextView が機能しない

于 2012-12-13T08:51:08.140 に答える