我经常搜索并尝试了许多解决方法 - 但似乎都没有。
在我的片段中,我有AutoCompleteTextView和标准的ArrayAdapter,它在onActivityCreated()函数中动态填充(如下所示)。
第一次添加片段时,一切正常。然而,在我用另一个片段替换这个片段(带有自动完成)后,使用'后退'按钮返回 - 我得到的问题是'自动完成'停止表现得像'自动完成' - 所以如果我现在输入它,但是我不再得到“建议下拉列表”了。
有一点要提到的是我没有使用设备softInput进行输入 - 因为我只需要将手机号码作为输入 - 我在屏幕上显示自己的自定义键。但我认为不应该造成任何问题。
附上2个截图 - 1)在替换片段之前自动完成工作正常2)更换片段并返回后,当自动完成停止显示建议时(注意我在这里再次键入'981')。
after fragment replace - 981 is typed again
欢迎任何帮助!!
// 'mCustMobileNums' is a singleton class which fetches strings stored in a DB table.
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
Log.d(TAG, "In onActivityCreated");
super.onActivityCreated(savedInstanceState);
if (mCustMobileNums==null) {
mCustMobileNums = CustomerMobileNums.getInstance(getActivity().getApplicationContext());
}
initInputCustMobile();
}
private void initInputCustMobile() {
if(mAdapter==null) {
Log.d(TAG, "Creating autocomplete adapter instance.");
mAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_dropdown_item_1line);
mAdapter.addAll(mCustMobileNums.getCollection());
mAdapter.setNotifyOnChange(false);
}
mInputCustMobile.setAdapter(mAdapter);
Log.d(TAG, "Initialized autocomplete adaptor: " + mAdapter.getCount());
}
// This function is called when I have insert new entry in the data set
public void updateAutoCompleteAdaptor(String mobileNum) {
Log.d(TAG,"In updateAutoCompleteAdaptor");
// add in memory and db
// will return TRUE if entry was not already available and added successfully
if( mCustMobileNums.addCustMobileNum(mobileNum) ) {
// recreate with sorted set
mAdapter.clear();
mAdapter.addAll(mCustMobileNums.getCollection());
mAdapter.notifyDataSetChanged();
Log.d(TAG,"Updated autocomplete adaptor: "+mAdapter.getCount());
}
}
答案 0 :(得分:0)
我找到了下一个解决方法:
mAdapter.filter.filter("")
在更新它时,只需在addAll语句之前调用它即可。
希望有帮助!这严重困扰了我一段时间。
答案 1 :(得分:0)
这发生在我身上,但是使用了不同的代码样式,我所做的是每次都设置适配器,而不使用notifydatachanges
,这不是最佳实践,甚至都不是最佳实践,但就我而言,更改并不是甚至计数。
autoCompleteTextView.setAdapter(adapter);