我的应用程序中有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,则删除关闭搜索视图。