Android搜索过滤器用于自定义列表

时间:2016-08-14 02:35:11

标签: android listview search filter

我已经完成了很多关于如何创建搜索过滤器的教程,但是我无法让它们工作。我认为通常会遇到一个问题,因为我发现的许多教程都使用了String但我使用的是自定义类。您将如何为自定义类和适配器创建搜索过滤器?

这是我的 MainActivity 代码

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




    }

}

这是我的自定义适配器

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;
          }
     }

这是我的自定义类

的代码
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 个答案:

答案 0 :(得分:1)

  1. 首先,为了大学名称相等而改写你的大学课程的equals方法。
  2. 然后,使用包含或可能相等的方法将其搜索到列表中。将结果保存到临时列表。
  3. 将您的临时列表设置为listview的源列表。
  4. 为每个搜索触发器执行此操作。