0

所以我有一个SimpleAdapter设置,我想在editText它上面添加一个,你可以输入你的搜索查询并实时更新列表。

我知道我已经可以setTextFilterEnabled(true)强制弹出键盘了。当您按下 an 并完成它时,我将简单地这样editText做。

我遇到的问题是当你搜索时弹出的字母框真的很难看而且太大了。它实际上占据了屏幕的 1/4,覆盖了您的搜索结果。有没有办法自定义这个?在这种情况下,有没有办法使用editTextfor asimpleAdapter以便我可以完全移除该框?

4

2 回答 2

0

虽然 Tobias 的回答很有见地,但它没有回答我的问题,而且对于我需要做的事情来说相当复杂。我没有每次都清除和重新加载列表,而是选择在数组适配器中使用过滤器来自动完成所有这些操作:

这是帮助我做到这一点的文章,它非常有用。

于 2012-10-16T15:10:13.580 回答
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包含信息进行操作,而是使用此方法将其复制ArrayList到一个临时的ArrayList

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 回答