Android搜索筛选自定义列表 [英] Android Search Filter for custom lists

查看:183
本文介绍了Android搜索筛选自定义列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经通过了许多关于如何创建搜索过滤器的教程,但是我不能让它们中的任何一个工作。我觉得通常遇到一个问题,因为我发现许多教程使用字符串,但我使用我的自定义类。如何为自定义类和适配器创建搜索过滤器?



这是我的 MainActivity 代码

  package com.example.android.college3; 

导入android.content.Intent;
导入android.os.Bundle;
导入android.support.v7.app.AppCompatActivity;
导入android.view.View;
导入android.widget.AdapterView;
导入android.widget.ListView;

import java.util.ArrayList;
$ b $ public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


// College列表视图创建者



最后ArrayList< College> students = new ArrayList<>();
students.add(新学院(布朗大学,R.drawable.brown_logo,College_Info_Brown.class));
students.add(新学院(宾夕法尼亚州立大学,R.drawable.penn_logo,College_Info.class));
students.add(新学院(康奈尔大学,R.drawable.cornell_logo,College_Info.class));

College_Adapter collegeAdapter = new College_Adapter(this,colleges);

最终ListView listView =(ListView)findViewById(R.id.college_list);
listView.setAdapter(collegeAdapter);

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override $ b $ public void onItemClick(AdapterView<> adapterView,View view,int i,long l){
College college = colleges.get(i);
Intent intent = new Intent(MainActivity.this,college.getCollegeinfo());
startActivity(intent);
}
});

//搜索



$ b}

}
自定义适配器

 

package com.example.android.college3;

导入android.app.Activity;
导入android.view.LayoutInflater;
导入android.view.View;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.ImageView;
导入android.widget.TextView;

import java.util.ArrayList;

public class College_Adapter扩展了ArrayAdapter< College> {



public College_Adapter(活动环境,ArrayList< College>学院){
super(context,0,colleges);

$ b $覆盖
public View getView
if(listItemView == null){
listItemView = LayoutInflater.from(getContext())。inflate(R.layout.list_item,parent,false);

College currentCollege = getItem(position);
TextView collegeNameTextView =(TextView)listItemView.findViewById(R.id.college_name_text_view);
collegenameTextView.setText(currentCollege.getCollegeName());

ImageView collegeImageView =(ImageView)listItemView.findViewById(R.id.college_image_image_view);
collegeImageView.setImageResource(currentCollege.getImageResourceId());

return listItemView;




这是我的自定义类的代码

  package com.example.android.college3; 

public class College {

private String mCollegeName;
private int mImageResourceId;
private Class<?> mCollegeInfo;


公立学院(String collegeName,int imageResourceId,Class collegeInfo){
mCollegeName = collegeName;
mImageResourceId = imageResourceId;
mCollegeInfo = collegeInfo;
}

public String getCollegeName(){
return mCollegeName;


public int getImageResourceId(){
return mImageResourceId;
}

public Class getCollegeinfo(){
return mCollegeInfo;


$ b


解决方案


  1. 首先,只替换College Name平等的大学课程的equals方法。然后,使用包含或可能的相等方法将其搜索到列表中。将结果保存到临时列表中。

  2. 将您的临时列表设置为源列表到列表视图。

  3. 为每个搜寻触发器都做。


I've been through many tutorials on how to create the search filter but I can't get any of them to work. I think usually encounter a problem because many of the tutorials I have found use a String but I use my custom class. How would you make the search filter for a custom class and adapter?

Here's my MainActivity code

package com.example.android.college3;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    //College List View creator



    final ArrayList<College> colleges = new ArrayList<>();
    colleges.add(new College("Brown University", R.drawable.brown_logo, College_Info_Brown.class));
    colleges.add(new College("Pennsylvania State University", R.drawable.penn_logo, College_Info.class));
    colleges.add(new College("Cornell University", R.drawable.cornell_logo, College_Info.class));

    College_Adapter collegeAdapter = new College_Adapter(this, colleges);

    final ListView listView = (ListView) findViewById(R.id.college_list);
    listView.setAdapter(collegeAdapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            College college = colleges.get(i);
                Intent intent = new Intent(MainActivity.this, college.getCollegeinfo());
                startActivity(intent);
        }
    });

    //search




    }

}

Here is my custom adapter

package com.example.android.college3;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;

public class College_Adapter extends ArrayAdapter<College> {



public College_Adapter(Activity context, ArrayList<College> colleges){
    super(context, 0 , colleges);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View listItemView = convertView;
    if (listItemView == null){
        listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
    }
    College currentCollege = getItem(position);
    TextView collegeNameTextView = (TextView) listItemView.findViewById(R.id.college_name_text_view);
    collegeNameTextView.setText(currentCollege.getCollegeName());

    ImageView collegeImageView = (ImageView) listItemView.findViewById(R.id.college_image_image_view);
    collegeImageView.setImageResource(currentCollege.getImageResourceId());

    return listItemView;
          }
     }

This is the code for my custom class

package com.example.android.college3;

public class College {

private String mCollegeName;
private int mImageResourceId;
private Class<?> mCollegeInfo;


public College(String collegeName, int imageResourceId, Class collegeInfo){
    mCollegeName = collegeName;
    mImageResourceId = imageResourceId;
    mCollegeInfo = collegeInfo;
}

public String getCollegeName(){
    return mCollegeName;
}

public int getImageResourceId(){
    return mImageResourceId;
}

public Class getCollegeinfo(){
    return mCollegeInfo;
       }

 }

解决方案

  1. Firstly, overrride your equals method of your College class for only College Name equality.
  2. Then, search it into the list with contains or likely equality methods. Save the result to a temp list.
  3. Set your temp list as source list to listview.
  4. Do it for every search trigger.

这篇关于Android搜索筛选自定义列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆