自动完成文本框 - 在选择后显示建议

4

我正在使用AutoCompleteTextView进行地址建议。

我想要做的是当用户输入地址时(例如“Ma”),建议会显示为“Mary,Madley,Ma ...”。

然后,当用户选择其中一个建议时,他会立即获得另一个包含完整地址的建议。

例如:他选择了“Mary”,然后他会得到类似“Mary 123, Boston”,“Mary 1566, New York”,“Mary Jane 569, New York”的建议。

问题在于建议已经填充到适配器中,但没有显示。在选择后,下拉列表不会显示。

到目前为止,我的文本观察器被分配给负责建议的AutoCompleteTextView:

TextWatcher textWatcher = new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    @Override
    public void afterTextChanged(Editable s) {

        if(etStreet.isPerformingCompletion())
            return;

        List<String> arrayValues = getValues();

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),
                android.R.layout.simple_dropdown_item_1line, arrayValues);
        etUlica.setAdapter(adapter);

    }
};

我尝试在项目点击、文本更改和其他每个事件上调用showDropDown(),但它就是不会出现。只有当用户在键盘上输入时才会显示。


可能有用,也可能无效...在用户完成选择后,尝试通过编写autocompletetextview.showDropDown()来再次显示建议。 - Mustanser Iqbal
@MustanserIqbal 我解释过我在很多地方都尝试了,但它仍然不会显示。 - Dino Velić
我应该能工作,但也许在这种情况下它不会工作...因为我还没有测试过。 - Mustanser Iqbal
然后您需要创建自己的自定义自动完成文本视图。 - Mustanser Iqbal
我可能完全错了,因为我不知道你的下拉菜单是如何工作的。在看到适配器后,难道你不需要通知吗? - cgr
不确定具体的方法,但你可以尝试使用AutoCompleteTextView的setOnClickListener来设置新的适配器,以使用你的姓名值更新地址。 - Pavya
1个回答

7
在您的AutoCompleteTextView.setOnItemClickListener()中编写以下代码:
autoComplete.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            autoComplete.postDelayed(new Runnable() {
                @Override
                public void run() {
                    autoComplete.showDropDown();
                }
            },100);
            autoComplete.setText(autoComplete.getText().toString());
            autoComplete.setSelection(autoComplete.getText().length());

        }
    });

就这样,它会像魔法一样工作!!!

这将为您的问题提供提示,根据您的需求更改并适配数据


1
是的,看起来它可以工作,但为什么?在这100毫秒内预期完成哪些操作?如果实际需要更长时间,会发生什么? - personne3000
2
我发现:在 onItemClick 后,Android 会关闭下拉菜单,因此在那里调用 showDropdown 将不起作用。我的建议是使用 onDismissListener 在那里初始化下一个建议,而不是使用任意持续时间的延迟任务。 - personne3000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接