如何在搜索时删除android searchview弹出文本?
我已经实现了操作栏SearchView,它工作正常,但在屏幕底部显示了一个浮动文本弹出窗口。请参见屏幕截图: ListView Java类:如何在搜索时删除android searchview弹出文本?,android,search,android-listview,searchview,android-search,Android,Search,Android Listview,Searchview,Android Search,我已经实现了操作栏SearchView,它工作正常,但在屏幕底部显示了一个浮动文本弹出窗口。请参见屏幕截图: ListView Java类: @Override public boolean onQueryTextChange(String newText) { if (TextUtils.isEmpty(newText)) { mListView.clearTextFilter(); } else {
@Override
public boolean onQueryTextChange(String newText) {
if (TextUtils.isEmpty(newText)) {
mListView.clearTextFilter();
} else {
// EventAdapterView ca = (EventAdapterView)mListView.getAdapter();
// ca.getFilter().filter(newText.toString());
// Filter lFilter = mDataAdapter.getFilter();
// lFilter.filter("");
// following line was causing the ugly popup window.
mListView.setFilterText(newText.toString());
// EventAdapterView ca = (EventAdapterView)mListView.getAdapter();
// ca.getFilter().filter(newText.toString());
}
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
return true;
}
适配器类
@Override
public Filter getFilter() {
/**
* A filter object which will filter message key
* */
Filter filter = new Filter() {
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
mEventUtil = (List<EventUtil>) results.values; // has the
// filtered
// values
notifyDataSetChanged(); // notifies the data with new filtered
// values. Only filtered values will be
// shown on the list
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults(); // Holds the
// results of a
// filtering
// operation for
// publishing
List<EventUtil> FilteredArrList = new ArrayList<EventUtil>();
if (mOriginalValues == null) {
mOriginalValues = new ArrayList<EventUtil>(mEventUtil); // mOriginalValues
}
if (mListItem == null) {
mListItem = new ArrayList<String>();
for (EventUtil message : mOriginalValues) {
mListItem.add(message.getEvent_Title());
}
}
/**
*
* If constraint(CharSequence that is received) is null returns
* the mOriginalValues(Original) values else does the Filtering
* and returns FilteredArrList(Filtered)
*
**/
if (constraint == null || constraint.length() == 0) {
/*
* CONTRACT FOR IMPLEMENTING FILTER : set the Original
* values to result which will be returned for publishing
*/
results.count = mOriginalValues.size();
results.values = mOriginalValues;
} else {
/* Do the filtering */
constraint = constraint.toString().toLowerCase();
for (int i = 0; i < mListItem.size(); i++) {
String data = mListItem.get(i);
if (data.toLowerCase().contains(constraint.toString())) {
FilteredArrList.add(mOriginalValues.get(i));
}
}
// set the Filtered result to return
results.count = FilteredArrList.size();
results.values = FilteredArrList;
}
return results;
}
};
return filter;
}
@覆盖
公共过滤器getFilter(){
/**
*将筛选消息密钥的筛选器对象
* */
过滤器过滤器=新过滤器(){
@抑制警告(“未选中”)
@凌驾
受保护的无效发布结果(CharSequence约束,
FilterResults(结果){
mEventUtil=(List)results.values;//具有
//过滤
//价值观
notifyDataSetChanged();//使用新筛选的
//值。将仅显示筛选后的值
//在列表上显示
}
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults results=new FilterResults();//保存
//调查结果
//过滤
//手术
//出版
List FilteredArrList=新建ArrayList();
if(mOriginalValues==null){
mOriginalValues=新阵列列表(mEventUtil);//mOriginalValues
}
如果(mListItem==null){
mListItem=新的ArrayList();
for(EventUtil消息:mOriginalValues){
添加(message.getEvent_Title());
}
}
/**
*
*如果约束(接收到的CharSequence)为null,则返回
*mOriginalValues(原始)值将执行过滤
*并返回FilterDarrList(已过滤)
*
**/
if(constraint==null | | constraint.length()==0){
/*
*实施过滤器的合同:设置原始
*将返回用于发布的结果的值
*/
results.count=mOriginalValues.size();
结果.值=mOriginalValues;
}否则{
/*进行过滤*/
constraint=constraint.toString().toLowerCase();
对于(int i=0;i
如何删除此浮动文本视图?试试这个
首先在列表视图上禁用TextFilterEnabled
yourListView.setTextFilterEnabled(false);
并按如下方式过滤您的数据:
android.widget.Filter filter = yourListAdapter.getFilter();
@Override
public boolean onQueryTextChange(String newText) {
// TODO Auto-generated method stub
filter.filter(newText);
return true;
}
就是这样,搜索弹出窗口就像一个符咒一样消失了如果您正在使用,那么您应该将搜索查询存储在一个成员变量中,以供以后使用,而不是使用适配器的过滤器:
说
然后更改加载程序的创建以处理搜索查询
@Override
public Loader<Cursor> onCreateLoader(final int id, final Bundle args) {
showProgress(true);
if (TextUtils.isEmpty(mSearchQuery)) {
return new CursorLoader(
mActivity,
CONTENT_URI,
PROJECTION,
DEFAULT_SELECTION,
null,
SORT_ORDER
);
}
mSearchQuery = "%" + mSearchQuery + "%";
return new CursorLoader(
mActivity,
CONTENT_URI,
PROJECTION,
// add the filtering criteria to the default.
DEFAULT_SELECTION + " AND " + COLUMN_A + " LIKE ?",
new String[]{mSearchQuery},
SORT_ORDER
);
}
显示文本的底部是任何类型的视图如何删除它,可以删除文本标签。您可以在Android示例中获得完整的源代码APIDemo-->视图-->搜索视图-->过滤器示例尝试在ListView中覆盖onDisplayHint,并且不调用super Inmpement。我尝试过相同的代码,但不同之处在于,您在方法外声明了过滤器对象,但在方法内声明了,我已经改变了它,现在它工作得很好。。。。无论如何谢谢@AT_AB
@Override
public Loader<Cursor> onCreateLoader(final int id, final Bundle args) {
showProgress(true);
if (TextUtils.isEmpty(mSearchQuery)) {
return new CursorLoader(
mActivity,
CONTENT_URI,
PROJECTION,
DEFAULT_SELECTION,
null,
SORT_ORDER
);
}
mSearchQuery = "%" + mSearchQuery + "%";
return new CursorLoader(
mActivity,
CONTENT_URI,
PROJECTION,
// add the filtering criteria to the default.
DEFAULT_SELECTION + " AND " + COLUMN_A + " LIKE ?",
new String[]{mSearchQuery},
SORT_ORDER
);
}
@Override
public boolean onQueryTextChange(String newText) {
mSearchQuery = newText;
// calls the above method
mActivity.getSupportLoaderManager().
restartLoader(0, null, this);
return true;
}