如何扩展EditText / AutoCompleteTextView以显示最后的'n'个输入?

时间:2014-02-04 11:33:09

标签: java android autocomplete android-edittext

我希望在用户点按文字输入时显示最后'n'个条目的列表。 我该怎么办?

现在我正在扩展EditText,并使用'x'按钮清除其内容。所以,我的想法是将此功能合并到这个小部件

1 个答案:

答案 0 :(得分:0)

@pskink的评论让我按照正确的方式

首先,必须重新实现 AutoCompleteTextView

public class QuickSayAutoComplete extends AutoCompleteTextView {

private Context ctx;

public QuickSayAutoComplete(Context context) {
    super(context);
    ctx = context;
    init();
}

public QuickSayAutoComplete(Context context, AttributeSet attrs) {
    super(context, attrs);
    ctx = context;
    init();
}

public QuickSayAutoComplete(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    ctx = context;
    init();
}

要添加最后引入的元素,必须添加 ClickListener

this.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            String text = getText().toString();

            // The text is not empty
            if ( (!text.matches("")) && (text.length() > 0)) {

                // The last element introduced will be the first
                ArrayAdapter<String> adapter = (ArrayAdapter<String>) getAdapter();
                adapter.remove(text);
                adapter.insert(text, 0);
            }
        }
    });

ACTV的适配器必须是ArrayList,如果不是,we cannot remove elements

    String[] array = {"Hello", "Good Morning", "Nice to see you"};
    ArrayList<String> greetings = new ArrayList<String>();
    greetings.addAll(Arrays.asList(array));
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(ctx, android.R.layout.simple_dropdown_item_1line, greetings);
    setAdapter(adapter);
    setThreshold(0);

最后,当用户触摸ACTV and there is not text input yet时,会显示DropDown列表(包含所有条目)。当用户引入输入时,列表变短。如果我们可以限制此点中显示的条目数

,这可能是完美的
// TouchListener to show the list without user input
setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        showDropDown();
        return false;
    }
});