Android Search Filter for custom lists

99封情书 提交于 2020-01-16 05:30:07

问题


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:


  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.


来源:https://stackoverflow.com/questions/38938657/android-search-filter-for-custom-lists

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!