片段转换后AutoCompleteTextView无法工作

7
我已经搜索了很多并尝试了许多解决方法 - 但似乎都没有起作用。
在我的片段中,我有一个带有标准ArrayAdapter的AutoCompleteTextView,在onActivityCreated()函数中动态填充(如下所示)。
当首次添加该片段时,一切正常。然而,当我使用“返回”按钮将此带自动完成的片段替换为另一个片段,并返回时,我遇到了问题,即“自动完成”停止像“自动完成”一样工作,因此如果我现在在其中输入,但我不再获得“建议下拉菜单”。
需要注意的一件事是,我不使用设备softInput进行输入 - 因为我只需要输入手机号码 - 我有自己的自定义键显示在屏幕上。但我不认为它会创建任何问题。
附上2个截图 - 1)在替换片段之前自动完成正常工作 2)替换片段并返回后,自动完成停止显示建议(请注意,我在这里再次键入了“981”)。 替换片段之前 替换片段并返回后 - 再次键入981 欢迎任何帮助!!
// '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());
    }
}

它在不同的设备上会这样吗?特定的Android版本呢? - kris larson
2个回答

1
我找到了下一个解决方法:
mAdapter.filter.filter("")

在更新addALL语句之前,请先调用此方法。

希望这能帮到你!这个问题困扰了我很长一段时间。


0

我也遇到过类似的问题,但是代码风格不同。我的解决方法是每次都设置适配器而不使用notifydatachanges。虽然这并不是最佳实践,甚至离最佳实践还有很远的距离,但在我的情况下,更改甚至没有被计算。

autoCompleteTextView.setAdapter(adapter); 

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