在android中编辑框文本更改后替换图标



我的应用程序中有editbox。在编辑框旁边,我有一个搜索图标。每当用户输入任何一个字符时,我都想用一个图标(十字图标)替换搜索图标,如果用户再次从编辑框中删除了他/她的所有文本,我想要搜索图标。

为此,我使用了以下代码。

mSearchView.addTextChangedListener(new TextWatcher(){

 @Override
      public void onTextChanged(CharSequence searchString, int start, int before, int count) {
            initCloseSearchView();              
            if (mDealerAdapter != null) {
                    mDealerAdapter.getFilter().filter(searchString);
                }              
            }
    @Override
      public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
            }
    @Override
     public void afterTextChanged(Editable s) {
             log.d(TAG, "inside afterTextChanged");
        }
});
private void initCloseSearchView(){     
  int textLength = mSearchView.length();
  log.d(TAG, "textLength  "+textLength);
  if(textLength >= 1){
    searchIcon.setVisibility(View.GONE);
    View searchView = (View) mLayoutSearch.findViewById(R.id.search);
    ViewGroup parent = (ViewGroup)searchView.getParent();
    int indexOfSearchView = parent.indexOfChild(searchView);
    log.d(TAG, "index of search==>"+indexOfSearchView);
    ImageButton closeSearch = new                       ImageButton(getActivity().getApplicationContext());
    closeSearch.setBackgroundResource(R.drawable.close_search);
    mLayoutSearch.addView(closeSearch, indexOfSearchView);
  }else{
            searchIcon.setVisibility(View.VISIBLE);
        }
  }

使用上面的代码,我可以将搜索图标替换为十字图标,但当用户从编辑框中删除他/她的文本时,十字图标会出现不止一次。如何解决此问题。

感谢

mSearchView.addTextChangedListener(new TextWatcher() {
 @Override
      public void onTextChanged(CharSequence searchString, int start, int before, int count) {
            initCloseSearchView();     
             if(count == 0){
              // set first image 
             }else{
               // set second image 
             }
            if (mDealerAdapter != null) {
                    mDealerAdapter.getFilter().filter(searchString);
                }              
            }
    @Override
      public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
            }
    @Override
     public void afterTextChanged(Editable s) {
             log.d(TAG, "inside afterTextChanged");
        }
});

根据您的要求设置图像

这是一个示例;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.xxx);
    initCloseSearchView();
}
mSearchView.addTextChangedListener(new TextWatcher() {
    @Override 
    public void onTextChanged(CharSequence searchString, int start, int before, int count) {               
         if (mDealerAdapter != null) { 
             mDealerAdapter.getFilter().filter(searchString);
         }               
    } 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count,int after) {
    } 
    @Override 
    public void afterTextChanged(Editable s) {
         log.d(TAG, "inside afterTextChanged");
         boolean isShowSearch = s.getText().toString().length() > 0 ?false:true;
         updateCloseSearchView(isShowSearch); 
    } 
}); 
private void initCloseSearchView(){      
/*    int textLength = mSearchView.length();
    log.d(TAG, "textLength  "+textLength);
    if(textLength >= 1){
        searchIcon.setVisibility(View.GONE);
        View searchView = (View) mLayoutSearch.findViewById(R.id.search);
        ViewGroup parent = (ViewGroup)searchView.getParent();
        int indexOfSearchView = parent.indexOfChild(searchView);
        log.d(TAG, "index of search==>"+indexOfSearchView);
        ImageButton closeSearch = new                               ImageButton(getActivity().getApplicationContext());
        closeSearch.setBackgroundResource(R.drawable.close_search);
        mLayoutSearch.addView(closeSearch, indexOfSearchView);
    }else{ 
        searchIcon.setVisibility(View.VISIBLE);
    } */
    //init the view
    //TODO
    closeSearch.setBackgroundResource(R.drawable.close_search);
    closeSearch.setVisibility(View.GONE);
    searchIcon.setVisibility(View.VISIBLE);
}
private void updateIcon(boolean isShowSearch){
    if(isShowSearch){
        closeSearch.setVisibility(View.GONE);
        searchIcon.setVisibility(View.VISIBLE);
    }else{
        closeSearch.setVisibility(View.VISIBLE);
        searchIcon.setVisibility(View.GONE);
    }
}

顺便说一下。Member变量应以前缀m开头。searchIcon->mSearchIcon。closeSearch->mCloseSearch。

因为当文本长度为0时没有注意,每次用户输入一些文本时,您都添加了一个视图。当用户删除editText中的文本时,您需要删除该视图。

创建一个标志,并在添加closeSearch视图时将其设置为1,如果在else部分中该标志等于1,则选中该标志。如果它等于1,则删除关闭搜索视图。