Android的 - AutoCompleteTextView,showDropDown()并不总是工作并不、工作、Android、AutoCompleteTextView

2023-09-04 04:17:17 作者:吹乱心事

当我试图每次dynamiclly更新autoCompleteTextview ArrayAdapter,如果下拉列表显示该消失,showDropDown()没有任何影响。

When I'm trying to update the autoCompleteTextview ArrayAdapter dynamiclly each time, if the dropdown is shown this disappear and showDropDown() has no effect.

我的code:

    @Override
protected void onCreate(Bundle savedInstanceState) {

.................................................

    mAutoComepleteTextView = (AutoCompleteTextView)findViewById(R.id.tv_autocomplete_search);
    mAutoComepleteTextView.setOnItemClickListener(this);
    mAutoComepleteTextView.addTextChangedListener(this);

    mArrayAdaptor = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line);
    mArrayAdaptor.setNotifyOnChange(false);

    mAutoComepleteTextView.setAdapter(mArrayAdaptor);
    mAutoComepleteTextView.setOnFocusChangeListener(this);
    mAutoComepleteTextView.setOnClickListener(this);
.................................................
}

OnClick事件:

OnClick event:

   @Override
public void onClick(View v) {
     super.onClick(v);
     switch(v.getId()){
         case R.id.tv_autocomplete_search:
        mAutoComepleteTextView.showDropDown(); // here work fine
        break;
    default :
        break;
    }
}

onFocusChange事件:

onFocusChange event:

    @Override
public void onFocusChange(View v, boolean hasFocus) {
    switch(v.getId()){
    case R.id.tv_autocomplete_search:
        mAutoComepleteTextView.showDropDown(); // here work fine
        break;
    default :
        break;
    }       
}

我的回调,这是我的问题:

My callback, here is my problem:

    @Override
public void onNewFriends(Vector<Friend> friends) {
    super.onNewFriends(friends);
    runOnUiThread(new Runnable() {

        @Override
        public void run() {
            boolean isVisible = mAutoComepleteTextView.isPopupShowing();
            if(isVisible)
                mAutoComepleteTextView.dismissDropDown();
            mArrayAdaptor.clear();

            for (Friend friend : ActivitiesPrefsData.getInstace().getFriends()) {
                if (friend.m_strEmail.equals(D.username)){
                    mArrayAdaptor.add(friend.m_deviceInfo.m_strName);
                }
                else
                    mArrayAdaptor.add(friend.m_strEmail);
            }
             mArrayAdaptor.notifyDataSetChanged();
             if(isVisible)
                mAutoComepleteTextView.showDropDown(); // here doesn't work
             }
    });
}

我将不胜感激任何帮助,谢谢。

I would be grateful for any help, thanks.

推荐答案

我在这里发表我找到了解决办法,重置适配器:

I post here the solution found by me, reset adapter:

    @Override
public void onNewFriends(Vector<Friend> friends) {
    super.onNewFriends(friends);
    runOnUiThread(new Runnable() {

        @Override
        public void run() {
            mArrayAdaptor.clear();

            for (Friend friend : ActivitiesPrefsData.getInstace().getFriends()) {
                if (friend.m_strEmail.equals(D.username)){
                    mArrayAdaptor.add(friend.m_deviceInfo.m_strName);
                    Log.d("java", friend.m_strEmail + " -- " + friend.m_deviceInfo.m_strName);
                }
                else
                    mArrayAdaptor.add(friend.m_strEmail);
            }
            mAutoComepleteTextView.setAdapter(null);          //this work
            mAutoComepleteTextView.setAdapter(mArrayAdaptor); //for me
        }
    });
}