2016-01-05 1 views
0

У меня есть editbox в моем приложении. кроме editbox у меня есть один значок поиска. всякий раз, когда пользователь вводит какой-либо один символ, я хочу заменить значок поиска еще одним значком (перекрестный значок), и если пользователь снова удалит все его текст из окна редактирования, я хочу найти значок поиска.заменить значок после изменения текста editbox в android

Для этого я использовал ниже код.

mSearchView.addTextChangedListener (новый 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); 
     } 

    } 

с кодом выше я в состоянии заменить значок поиска с крестиком, но когда пользователь удалит его/ее текст из кросс окна редактирования значка появляется больше один раз. Как решить эту проблему.

Благодаря

+0

Вы могли бы добавить скриншот своего макета и xml, если используете. спасибо – piotrek1543

ответ

2
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"); 
     } 
}); 

набор изображений согласно вашему требованию

+0

Спасибо. Он работает для меня – Prasad

+0

ваш привет ... – Pavya

0

Потому что ты не заботился, когда длина текста 0, вы добавили просматривать каждый раз, когда пользователь вошел какой-то текст. вы должны удалить эту точку зрения Whe n пользователь удаляет текст в editText.

создать флаг и установить его в 1 при добавлении вида closeSearch и проверить этот флаг, если он равен 1 в части else. если он равен 1, то удалите вас closeSearch View.

1

Это образец;

@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

Спасибо за ваш ответ. Я попробовал предыдущий ответ, он работает для меня. Но ваш ответ также является близким решением моей проблемы. Так держать. хорошо – Prasad

Смежные вопросы