0

SimpleAdapterセットアップがあり、editTextその上に検索クエリを入力してリストをリアルタイムで更新できるように追加したいと思います。

私はすでにsetTextFilterEnabled(true)キーボードポップアップを強制できることを知っています。あなたがanを押すと、私はそれを単純に行うつもりでしeditTextた。

私が抱えている問題は、検索時に文字が表示されるボックスが本当に醜くて大きすぎることです。文字通り画面の1/4を占め、検索結果をカバーします。これをカスタマイズする方法はありますか?editTextこの場合にforを使用してsimpleAdapter、そのボックスを完全に削除できるようにする方法はありますか?

4

2 に答える 2

0

を追加する必要がaddTextChangedListenerありTextWatcherます。

Boolean[] isPresent;

ed = (EditText) findViewById(R.id.editText1);
    ed.addTextChangedListener(new TextWatcher() {

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1,
                    int arg2, int arg3) {

            }

            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {

                textLength = ed.getText().length();
                list.clear();
                isPresent = initIsPresentArray();

                for (int i = 0; i < tempList.length; i++) {
                    for (int j = 0; j < (tempList[i].length() - (textLength - 1)); j++) {
                        if (textLength <= tempList[i].length()) {
                            if (isPresent[i] == false) {
                                if (ed.getText()
                                        .toString()
                                        .equalsIgnoreCase(
                                                (String) tempList[i]
                                                        .subSequence(
                                                                j,
                                                                (j + textLength)))) {
                                    list.add(tempCaseList.get(i));
                                    isPresent[i] = true;
                                }
                            }
                        }
                    }
                    if (list.size() == 0) {
                        error.setText(getResources().getString(R.string.notFound));
                    } else {
                        error.setText("");
                    }

                    lv.setAdapter(new CustomAdapter(History.this, list));
                }
            }
        });

そして、メソッドinitIsPresentArray()

 public Boolean[] initIsPresentArray() {
            Boolean[] isPresent = new Boolean[tempCaseList.size()];
            for (int i = 0; i < isPresent.length; i++) {
                isPresent[i] = false;
            }
            return isPresent;
        }

ご覧のとおり、情報が含まれている部分を直接操作することはありませんが、この方法を使用して、これを一時的なArrayListものにコピーします。ArrayListArrayList

public ArrayList<Case> createTempList(ArrayList<Case> listOfCases) {

    ArrayList<Case> temporaryList = new ArrayList<Case>();

    for (Case c : listOfCases) {
        temporaryList.add(c);
    }

    return temporaryList;
}

不明な点がある場合は、コメントを追加してください。

于 2012-10-05T13:30:53.050 に答える
0

トビアスの答えは洞察に満ちていましたが、私の質問には答えず、私がしなければならないことにはかなり複雑でした。毎回リストをクリアして再ロードするのではなく、すべてを自動的に実行するアレイアダプターでフィルターを使用することを選択しました。

これは私がそれをするのを助けた記事であり、それは非常に役に立ちました。

于 2012-10-16T15:10:13.580 に答える