Android 寻找listview上搜索函数的最佳匹配解决方案
我想在自定义列表视图中添加一个搜索功能。实际上,我在网上搜索了几个小时,但我无法理解所有那些复杂的教程或演示,所以我决定把我的问题发布在这里。希望有人能帮我解决这个问题。这是我的密码Android 寻找listview上搜索函数的最佳匹配解决方案,android,Android,我想在自定义列表视图中添加一个搜索功能。实际上,我在网上搜索了几个小时,但我无法理解所有那些复杂的教程或演示,所以我决定把我的问题发布在这里。希望有人能帮我解决这个问题。这是我的密码 ListView lv; EditText inputSearch; CustomListView testingAdapter; //at oncreate method lv = (ListView) findViewById(R.id.lvEditSavingList)
ListView lv;
EditText inputSearch;
CustomListView testingAdapter;
//at oncreate method
lv = (ListView) findViewById(R.id.lvEditSavingList);
inputSearch = (EditText) findViewById(R.id.inputSearch);
loadListViewData();
private void loadListViewData() {
// TODO Auto-generated method stub
UnderControlDb db = new UnderControlDb(getApplicationContext());
String[] info = db.MySavingShowData();
int counter = info.length;
Integer[] imageID = new Integer[counter];
for(int i=0;i<counter;i++){
imageID[i] = R.drawable.edit_notes_list;
}
testingAdapter = new CustomListView(MySaving.this, info, imageID);
lv.setAdapter(testingAdapter);
}
ListView-lv;
编辑文本输入搜索;
CustomListView测试适配器;
//立即创建方法
lv=(ListView)findViewById(R.id.lvEditSavingList);
inputSearch=(EditText)findViewById(R.id.inputSearch);
loadListViewData();
私有void loadListViewData(){
//TODO自动生成的方法存根
UnderControlDb=新的UnderControlDb(getApplicationContext());
String[]info=db.MySavingShowData();
int计数器=信息长度;
整数[]imageID=新整数[计数器];
对于(inti=0;i,我编写了一个小示例,向您展示如何从listView中搜索数据。
找到下面的代码,并不要犹豫,问我任何问题,以进一步澄清
public class TestSearch extends Activity {
ListView lv;
EditText inputSearch;
CustomListView testingAdapter;
public class listContent{
public String info;
public int imageInfo;
public listContent(String info, int imageInfo) {
this.info = info;
this.imageInfo = imageInfo;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public int getImageInfo() {
return imageInfo;
}
public void setImageInfo(int imageInfo) {
this.imageInfo = imageInfo;
}
}
ArrayList<listContent> itemsContent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_search);
itemsContent = new ArrayList<listContent>();
CustomListView testingAdapter;
lv = (ListView) findViewById(R.id.lvEditSavingList);
inputSearch = (EditText) findViewById(R.id.inputSearch);
inputSearch.addTextChangedListener(textWatcher);
loadListViewData();
}
private TextWatcher textWatcher = new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
String text = inputSearch.getText().toString().toLowerCase(Locale.getDefault());
testingAdapter.filter(text);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
};
private void loadListViewData() {
// TODO Auto-generated method stub
itemsContent.add(new listContent("text", R.drawable.ic_launcher));
itemsContent.add(new listContent("hello", R.drawable.ic_launcher));
itemsContent.add(new listContent("dear", R.drawable.ic_launcher));
itemsContent.add(new listContent("test", R.drawable.ic_launcher));
itemsContent.add(new listContent("lol", R.drawable.ic_launcher));
testingAdapter = new CustomListView(TestSearch.this, itemsContent);
lv.setAdapter(testingAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.test_search, menu);
return true;
}
public class CustomListView extends BaseAdapter{
private final Context mContext;
private ArrayList<listContent> items;
ArrayList<listContent> filtereditems;
public CustomListView(Context context, ArrayList<listContent> items) {
this.mContext= context;
this.items = items;
this.filtereditems = new ArrayList<listContent>();
this.filtereditems.addAll(items);
}
@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(mContext);
View rowView= inflater.inflate(R.layout.my_saving_list, null, true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.tvSavingListView);
ImageView imageView = (ImageView) rowView.findViewById(R.id.imgS);
txtTitle.setText(items.get(position).getInfo());
imageView.setImageResource(items.get(position).getImageInfo());
return rowView;
}
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
items.clear();
if (charText.length() == 0) {
items.addAll(filtereditems);
}
else
{
for (listContent wp : filtereditems)
{
if(wp.getInfo().startsWith(charText))
{
items.add(wp);
}
}
}
notifyDataSetChanged();
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int arg0) {
return items.get(arg0);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
}
}
公共类TestSearch扩展活动{
ListView lv;
编辑文本输入搜索;
CustomListView测试适配器;
公共类列表内容{
公共字符串信息;
公共信息;
公共列表内容(字符串信息、int imageInfo){
this.info=info;
this.imageInfo=imageInfo;
}
公共字符串getInfo(){
退货信息;
}
公共void setInfo(字符串信息){
this.info=info;
}
public int getImageInfo(){
返回图像信息;
}
公共无效setImageInfo(int imageInfo){
this.imageInfo=imageInfo;
}
}
arraylistitemscontent;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u test\u search);
itemsContent=newarraylist();
CustomListView测试适配器;
lv=(ListView)findViewById(R.id.lvEditSavingList);
inputSearch=(EditText)findViewById(R.id.inputSearch);
inputSearch.addTextChangedListener(textWatcher);
loadListViewData();
}
私有TextWatcher TextWatcher=新的TextWatcher(){
@凌驾
公共无效后文本已更改(可编辑){
String text=inputSearch.getText().toString().toLowerCase(Locale.getDefault());
testingAdapter.filter(文本);
}
@凌驾
更改前的公共void(字符序列arg0、int arg1、int arg2、,
int arg3){
}
@凌驾
public void onTextChanged(字符序列arg0、int arg1、int arg2、,
int arg3){
}
};
私有void loadListViewData(){
//TODO自动生成的方法存根
itemsContent.add(新列表内容(“text”,R.drawable.ic_launcher));
itemsContent.add(新列表内容(“hello”,R.drawable.ic_启动器));
itemsContent.add(新列表内容(“亲爱的”,R.drawable.ic_启动器));
itemsContent.add(新列表内容(“test”,R.drawable.ic_启动器));
itemsContent.add(新列表内容(“lol”,R.drawable.ic_启动器));
testingAdapter=新的CustomListView(TestSearch.this,itemsContent);
低压设置适配器(测试适配器);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.test\u搜索,菜单);
返回true;
}
公共类CustomListView扩展了BaseAdapter{
私有最终上下文mContext;
私有ArrayList项;
阵列列表过滤器;
公共CustomListView(上下文、ArrayList项){
this.mContext=上下文;
这个项目=项目;
this.filtereditems=new ArrayList();
this.filtereditems.addAll(项目);
}
@凌驾
公共视图getView(内部位置、视图视图、视图组父视图){
LayoutFlater充气机=LayoutFlater.from(mContext);
视图行视图=充气机。充气(R.layout.my_saving_list,null,true);
TextView txtTitle=(TextView)rowView.findViewById(R.id.tvSavingListView);
ImageView=(ImageView)rowView.findViewById(R.id.imgS);
setText(items.get(position.getInfo());
setImageResource(items.get(position.getImageInfo());
返回行视图;
}
公共空过滤器(字符串图表文本){
charText=charText.toLowerCase(Locale.getDefault());
items.clear();
如果(ChartText.length()==0){
items.addAll(filtereditems);
}
其他的
{
对于(listContent wp:filtereditems)
{
if(wp.getInfo().startsWith(charText))
{
项目。添加(wp);
}
}
}
notifyDataSetChanged();
}
@凌驾
public int getCount(){
返回items.size();
}
@凌驾
公共对象getItem(int arg0){
返回项目。获取(arg0);
}
@凌驾
公共长getItemId(int arg0){
返回arg0;
}
}
}
谢谢你的努力,但这对我来说还是有点复杂,但我找到了另一种方法来做,我实际上遵循了这种方法
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TableRow>
<TextView
android:id="@+id/tvSavingListView"
android:layout_width="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:textSize="16sp"
android:layout_height="30dp" />
<ImageView
android:id="@+id/imgS"
android:layout_width="25dp"
android:layout_height="25dp"/>
</TableRow>
</TableLayout>
public class TestSearch extends Activity {
ListView lv;
EditText inputSearch;
CustomListView testingAdapter;
public class listContent{
public String info;
public int imageInfo;
public listContent(String info, int imageInfo) {
this.info = info;
this.imageInfo = imageInfo;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public int getImageInfo() {
return imageInfo;
}
public void setImageInfo(int imageInfo) {
this.imageInfo = imageInfo;
}
}
ArrayList<listContent> itemsContent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_search);
itemsContent = new ArrayList<listContent>();
CustomListView testingAdapter;
lv = (ListView) findViewById(R.id.lvEditSavingList);
inputSearch = (EditText) findViewById(R.id.inputSearch);
inputSearch.addTextChangedListener(textWatcher);
loadListViewData();
}
private TextWatcher textWatcher = new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
String text = inputSearch.getText().toString().toLowerCase(Locale.getDefault());
testingAdapter.filter(text);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
};
private void loadListViewData() {
// TODO Auto-generated method stub
itemsContent.add(new listContent("text", R.drawable.ic_launcher));
itemsContent.add(new listContent("hello", R.drawable.ic_launcher));
itemsContent.add(new listContent("dear", R.drawable.ic_launcher));
itemsContent.add(new listContent("test", R.drawable.ic_launcher));
itemsContent.add(new listContent("lol", R.drawable.ic_launcher));
testingAdapter = new CustomListView(TestSearch.this, itemsContent);
lv.setAdapter(testingAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.test_search, menu);
return true;
}
public class CustomListView extends BaseAdapter{
private final Context mContext;
private ArrayList<listContent> items;
ArrayList<listContent> filtereditems;
public CustomListView(Context context, ArrayList<listContent> items) {
this.mContext= context;
this.items = items;
this.filtereditems = new ArrayList<listContent>();
this.filtereditems.addAll(items);
}
@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(mContext);
View rowView= inflater.inflate(R.layout.my_saving_list, null, true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.tvSavingListView);
ImageView imageView = (ImageView) rowView.findViewById(R.id.imgS);
txtTitle.setText(items.get(position).getInfo());
imageView.setImageResource(items.get(position).getImageInfo());
return rowView;
}
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
items.clear();
if (charText.length() == 0) {
items.addAll(filtereditems);
}
else
{
for (listContent wp : filtereditems)
{
if(wp.getInfo().startsWith(charText))
{
items.add(wp);
}
}
}
notifyDataSetChanged();
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int arg0) {
return items.get(arg0);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
}
}