T. Yang
T. Yang

Reputation: 33

Android Search Filter for custom lists

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

 }

Upvotes: 1

Views: 177

Answers (1)

Tugrul
Tugrul

Reputation: 1808

  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.

Upvotes: 1

Related Questions