- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
你好我是android studio的新手。我想在不使用数据库的情况下搜索操作栏上的 ListView
项目。目前我的代码只显示带有多行文本的ListView
。你能帮助我使用搜索小部件而不是 editText 来实现这一点吗?
最佳答案
<强>1。添加搜索菜单
创建一个带有搜索菜单项的菜单资源文件(当点击搜索菜单项时,搜索小部件将出现在操作栏中)。
以下是我创建的示例菜单资源 (res/menu/search_menu.xml)
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/search"
android:title="Search"
android:icon="@drawable/search"
android:showAsAction="collapseActionView|ifRoom"
android:actionViewClass="android.widget.SearchView" />
</menu>
在上面的菜单项中,collapseActionView 属性允许您的 SearchView 扩展以占据整个操作栏,并在不使用时折叠回正常的操作栏项
<强>2。创建 SearchableConfiguration
可搜索配置定义 SearchView 的行为方式
需要在 xml(res/xml/searchable.xml) 中定义它。以下是一个可搜索的配置文件示例
<?xml version="1.0" encoding="utf-8"?>
<searchable
xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="Search friend">
</searchable>
然后将此元素添加到带有标签的相关 Activity 中
<activity
android:name=".ui.FriendListActivity"
android:screenOrientation="portrait"
android:configChanges="orientation"
android:theme="@style/Theme.Yello"
android:windowSoftInputMode="stateHidden"
android:launchMode="singleTask"
android:parentActivityName=".ui.SensorDetailsActivity">
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable">
</meta-data>
</activity>
在我的场景中,我要将 SearchView 添加到 FriendListActivity
<强>3。添加菜单和 SearchableConfiguration 到 Activity
将可搜索配置与 Activity 类中的 SearchView 相关联
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.search_menu, menu);
SearchManager searchManager = (SearchManager)
getSystemService(Context.SEARCH_SERVICE);
searchMenuItem = menu.findItem(R.id.search);
searchView = (SearchView) searchMenuItem.getActionView();
searchView.setSearchableInfo(searchManager.
getSearchableInfo(getComponentName()));
searchView.setSubmitButtonEnabled(true);
searchView.setOnQueryTextListener(this);
return true;
}
现在 SearchView 添加到 Activity 中。但搜索功能仍然不起作用
<强>4。添加搜索功能
在activity中实现SearchView.OnQueryTextListener
,现在需要覆盖两个新方法
public boolean onQueryTextSubmit(String query)
public boolean onQueryTextChange(String newText)
该接口(interface)监听SearchView中的文本变化事件
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
friendListAdapter.getFilter().filter(newText);
return true;
}
这里的 onQueryTextChange 函数使用列表适配器进行过滤,为了进行过滤,适配器需要实现 Filterable 接口(interface)
4.可过滤适配器
在我的场景中,我使用了 BaseAdapter 来实现 Filterable 接口(interface)
以下是我的适配器类(FriendListAdapter)的实现
import android.content.Context;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.*;
import com.score.senzors.R;
import com.score.senzors.pojos.User;
import java.util.ArrayList;
/**
* Display friend list
*
*/
public class FriendListAdapter extends BaseAdapter implements Filterable {
private FriendListActivity activity;
private FriendFilter friendFilter;
private Typeface typeface;
private ArrayList<User> friendList;
private ArrayList<User> filteredList;
/**
* Initialize context variables
* @param activity friend list activity
* @param friendList friend list
*/
public FriendListAdapter(FriendListActivity activity, ArrayList<User> friendList) {
this.activity = activity;
this.friendList = friendList;
this.filteredList = friendList;
typeface = Typeface.createFromAsset(activity.getAssets(), "fonts/vegur_2.otf");
getFilter();
}
/**
* Get size of user list
* @return userList size
*/
@Override
public int getCount() {
return filteredList.size();
}
/**
* Get specific item from user list
* @param i item index
* @return list item
*/
@Override
public Object getItem(int i) {
return filteredList.get(i);
}
/**
* Get user list item id
* @param i item index
* @return current item id
*/
@Override
public long getItemId(int i) {
return i;
}
/**
* Create list row view
* @param position index
* @param view current list item view
* @param parent parent
* @return view
*/
@Override
public View getView(int position, View view, ViewGroup parent) {
// A ViewHolder keeps references to children views to avoid unnecessary calls
// to findViewById() on each row.
final ViewHolder holder;
final User user = (User) getItem(position);
if (view == null) {
LayoutInflater layoutInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(R.layout.friend_list_row_layout, parent, false);
holder = new ViewHolder();
holder.iconText = (TextView) view.findViewById(R.id.icon_text);
holder.name = (TextView) view.findViewById(R.id.friend_list_row_layout_name);
holder.iconText.setTypeface(typeface, Typeface.BOLD);
holder.iconText.setTextColor(activity.getResources().getColor(R.color.white));
holder.name.setTypeface(typeface, Typeface.NORMAL);
view.setTag(holder);
} else {
// get view holder back
holder = (ViewHolder) view.getTag();
}
// bind text with view holder content view for efficient use
holder.iconText.setText("#");
holder.name.setText(user.getEmail());
view.setBackgroundResource(R.drawable.friend_list_selector);
return view;
}
/**
* Get custom filter
* @return filter
*/
@Override
public Filter getFilter() {
if (friendFilter == null) {
friendFilter = new FriendFilter();
}
return friendFilter;
}
/**
* Keep reference to children view to avoid unnecessary calls
*/
static class ViewHolder {
TextView iconText;
TextView name;
}
/**
* Custom filter for friend list
* Filter content in friend list according to the search text
*/
private class FriendFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if (constraint!=null && constraint.length()>0) {
ArrayList<User> tempList = new ArrayList<User>();
// search content in friend list
for (User user : friendList) {
if (user.getEmail().toLowerCase().contains(constraint.toString().toLowerCase())) {
tempList.add(user);
}
}
filterResults.count = tempList.size();
filterResults.values = tempList;
} else {
filterResults.count = friendList.size();
filterResults.values = friendList;
}
return filterResults;
}
/**
* Notify about filtered list to ui
* @param constraint text
* @param results filtered result
*/
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
filteredList = (ArrayList<User>) results.values;
notifyDataSetChanged();
}
}
}
在这里我定义了自定义过滤器类 FriendFilter 来进行过滤,我根据在 SearchView 中输入的名称过滤列表
关于java - 在操作栏上搜索 ListView 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43426987/
我使用 Runtime.getRuntime().exec 来运行 perl 程序。现在我想在执行过程中显示百分比进度条,然后在perl程序执行完成后,它应该关闭进度条。我该怎么做? Runtime.
我已广泛搜索该网站,但找不到答案。请我是新手,我需要你的帮助。 我想创建一个固定的导航栏,但每次在我的 CSS 样式表中放置一个固定的规则时,导航栏都会消失。这是我的 html 代码:
Here's a nice jsFiddle illustrating the problem 我正在尝试创建一个标题栏元素... 永远只有 1 行高 在右上角有始终存在的控件 在左上角有一个标题,如
int fd = open(JOYSTICK_NAME, O_RDONLY | O_NONBLOCK); O_RDONLY 和 O_NONBLOCK 之间的栏是什么意思?我在 OpenGL/GLUT
我注意到我的网页在页脚之后和页面底部有一个空白/栏: 我试图通过使用 Chrome 中的 inspect 元素来查找此问题的原因,但找不到任何内容。我正在使用 Boostrap,这是我的页脚 HTML
我已经对这个主题进行了一些研究,但我找不到完整的解决方案,因此,我一步一步地尝试和错误,我终于找到了如何实现这些结果:透明或彩色Actionbar 和 Statusbar。请参阅下面的答案。 最佳答案
Highcharts 教程中的经典示例是: $(function () { $('#container').highcharts({ chart: { type: 'bar'
注意 :这与 iOS 13 中使用的新默认模态呈现样式无关。 我有一个奇怪的问题,显示模态 UINavigationController . 考虑一个 UIViewController位于 UINav
我需要帮助了解如何在加载页面时隐藏 iPad 地址栏或顶部的整个地址栏。 我正在开发基于在线客户管理系统的系统,需要隐藏 iPad 地址栏,因为它在查看网站时会占用大量空间。 问候涡流 已经尝试了以下
我在向栏中添加文本时遇到了一些问题。我想在栏上方显示值,但我无法向每个栏添加文本。 现在我的dom结构是: g rect rect rect 我想要什么: g g.bar rect
我有 ListView ,数据将从数据表显示在 ListView 中像这样我已经完成了但是我在数据行 6 有问题 dt = classes.xxxxx.GetData(sql,
我使用 opposite 属性将 xAxis 向右移动。条形图怎么可能也从右侧开始? 谢谢! Highcharts.chart('absoluteInterruptions', { chart:
我得到了这张图片,我想在我的导航 Controller 中使用它: 我是这样设置的(根据 this 问题的建议): UINavigationBar *theBar = self.navigationC
这个问题在这里已经有了答案: How to disable breadcrumbs in Eclipse (11 个答案) 关闭 9 年前。 有谁知道如何删除我在 Eclipse 中用红色圈出的栏?
总而言之,我的应用程序中有一个浏览器,我希望它只启动 5 个网站,仅此而已。有没有办法让我的浏览器通过设置自定义字符串来启动 5 个网站,例如 if {用户键入此字符串} 转到该网站,然后 else
我想在我的应用程序中实现一个进度条。发生的过程是应用程序将一个目录复制到 iOS 文档目录中。通常需要 7-10 秒(iPhone 4 测试)。我对进度条的理解是你在事情发生时更新进度条。但是根据目录
我正在寻找一种创建交互式子弹图的方法,它允许用户单击图中的任意位置并设置一个标记,然后根据该标记所在的位置计算一些简单的值。例如,我希望它看起来类似于: http://www.usrecordings
我目前在一个网站上工作,我有一张人的照片。在图片的右侧,我想要名称和描述。名称应与描述具有不同的背景。我上传了一张它应该是什么样子的图片:http://www.tiikoni.com/tis/view
我将 div 栏设置为不滚动,因此它将始终显示在网站顶部。在这个栏内,我有另一个 div 框,里面有两个按钮,它们向右浮动,所以它们总是在右上角。 问题是我希望按钮居中于页面的右上角而不是右上角。相反
因此,我在我的网站中使用了一个选择栏。我试图在悬停时更改选项的背景颜色。此外,如果有人知道设置垂直 slider 样式的好方法,那就太棒了。 这是我正在尝试做的事情的 fiddle : http://
我是一名优秀的程序员,十分优秀!