如何按listview进行筛选

如何按listview进行筛选,listview,filter,spinner,Listview,Filter,Spinner,我想基于微调器过滤到listview 例如,我有一个ListView的代码 ("Singapore Discovery Centre", "Singapore Science Centre", "Mint Museum", "Singapore Art Museum", "Army Museum"). ("Centre", "Singapore", "Museum"). 我有一个Spinner的代码是 ("Singapore Discovery Centre", "Singapore S

我想基于微调器过滤到listview

例如,我有一个ListView的代码

("Singapore Discovery Centre",
"Singapore Science Centre",
"Mint Museum",
"Singapore Art Museum",
"Army Museum"). 
("Centre", 
"Singapore",
"Museum").
我有一个Spinner的代码是

("Singapore Discovery Centre",
"Singapore Science Centre",
"Mint Museum",
"Singapore Art Museum",
"Army Museum"). 
("Centre", 
"Singapore",
"Museum").
我想要的是:点击新加坡,在列表视图中,它会过滤掉所有的“新加坡”

我试过我的这个编码

你能告诉我,这有什么问题吗

MainActivity.java

public abstract class MainActivity extends ListActivity implements OnItemSelectedListener {

    String[] Category = {
    "Singapore discovery Centre",
    "Singapore Science Centre",
    "Mint Museum",
    "Singapore Art Museum",
    "Army Museum"
};

String [] keywords = {
    "Centre",
    "Musuem",
    "Singapore",

};

Spinner s1;
ListView listview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listview = (ListView) findViewById(R.id.listView1);
        s1 = (Spinner) findViewById(R.id.spinner1);

        s1.setOnItemSelectedListener(this);

                setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,Category)); 

                ArrayAdapter<String> aa = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, keywords);

                aa.setDropDownViewResource(
                           android.R.layout.simple_spinner_dropdown_item);
                        s1.setAdapter(aa);
                    }

    public void onItemSelected(AdapterView<?> parent, View v, int position,
            long id) {
        listview.setFilterText(Category[position]);
    }


    public void onNothingSelected(AdapterView<?> parent) {
        listview.setFilterText("");
    }

public void onListItemClick(ListView parent, View v, int position,long id)
        {
            Toast.makeText(this, "You have selected " + Category[position], Toast.LENGTH_SHORT).show();
        }
        }
public class MainActivity extends ListActivity implements
        OnItemSelectedListener {

    String[] Category = { "Singapore discovery Centre",
            "Singapore Science Centre", "Mint Museum", "Singapore Art Museum",
            "Army Museum" };

    String[] keywords = { "Centre", "Museum", "Singapore",

    };
    ArrayList<String> cat = new ArrayList<String>();
    ArrayList<String> mPostingData = new ArrayList<String>();
    Spinner s1;
    ListView listview;
    CustomAdapter cus;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listview = (ListView) findViewById(R.id.listView1);
        s1 = (Spinner) findViewById(R.id.spinner1);
        for (int i = 0; i < Category.length; i++) {
            cat.add(Category[i]);
        }

        // aa = new
        // ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,Category);
        s1.setOnItemSelectedListener(this);
        mPostingData = cat;
        for (int i = 0; i < mPostingData.size(); i++) {
            if (mPostingData.size() > 0)
                Log.i("Datas", mPostingData.get(i));
        }
        cus = new CustomAdapter(this, 0);
        setListAdapter(cus);

        ArrayAdapter<String> aa = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, keywords);

        aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        s1.setAdapter(aa);
    }

    public void onItemSelected(AdapterView<?> parent, View v, int position,
            long id) {
        // listview.setFilterText(Category[position]);
        String Text = s1.getSelectedItem().toString();
        cus.getFilter().filter(Text);
        cus.notifyDataSetChanged();
    }

    public void onNothingSelected(AdapterView<?> parent) {
        // listview.setFilterText("");
    }

    public void onListItemClick(ListView parent, View v, int position, long id) {
        Toast.makeText(this, "You have selected " + mPostingData.get(position),
                Toast.LENGTH_SHORT).show();
    }

    class CustomAdapter extends ArrayAdapter<String> {

        public void setData(ArrayList<String> mPpst) {
            mPostingData = mPpst;// contains class items data.
        }

        @Override
        public Filter getFilter() {
            return new Filter() {
                @Override
                protected void publishResults(CharSequence constraint,
                        FilterResults results) {
                    if (results != null && results.count >= 0) {
                        setData((ArrayList<String>) results.values);
                    } else {
                        setData(cat);// set original values
                    }

                    notifyDataSetInvalidated();
                }

                @Override
                protected FilterResults performFiltering(CharSequence constraint) {
                    FilterResults result = new FilterResults();
                    if (!TextUtils.isEmpty(constraint)) {
                        constraint = constraint.toString();
                        ArrayList<String> foundItems = new ArrayList<String>();
                        if (cat != null) {
                            for (int i = 0; i < cat.size(); i++) {

                                if (cat.get(i).contains(constraint)) {
                                    System.out.println("My datas" + cat.get(i));
                                    foundItems.add(cat.get(i));

                                } else {

                                }
                            }
                        }
                        result.count = foundItems.size();// search results found
                                                            // return count
                        result.values = foundItems;// return values
                    } else {
                        result.count = -1;// no search results found
                    }

                    return result;
                }
            };
        }

        LayoutInflater mInflater;

        public CustomAdapter(Context context, int textViewResourceId) {
            super(context, textViewResourceId);
            // TODO Auto-generated constructor stub
            mInflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return mPostingData.size();
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            ViewHolder vh;
            if (convertView == null) {
                vh = new ViewHolder();
                convertView = mInflater.inflate(R.layout.row, null);
                vh.t1 = (TextView) convertView.findViewById(R.id.textView1);

                convertView.setTag(vh);
            } else {
                // Get the ViewHolder back to get fast access to the TextView
                // and the ImageView.
                vh = (ViewHolder) convertView.getTag();
            }
            if (mPostingData.size() > 0)
                vh.t1.setText(mPostingData.get(position));
            return convertView;
        }

    }

    static class ViewHolder {
        TextView t1;
    }
}

您必须使用自定义适配器和自定义筛选器

删除类的
摘要

row.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="19dp"
        android:text="TextView" />

</RelativeLayout>

MainActivity.java

public abstract class MainActivity extends ListActivity implements OnItemSelectedListener {

    String[] Category = {
    "Singapore discovery Centre",
    "Singapore Science Centre",
    "Mint Museum",
    "Singapore Art Museum",
    "Army Museum"
};

String [] keywords = {
    "Centre",
    "Musuem",
    "Singapore",

};

Spinner s1;
ListView listview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listview = (ListView) findViewById(R.id.listView1);
        s1 = (Spinner) findViewById(R.id.spinner1);

        s1.setOnItemSelectedListener(this);

                setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,Category)); 

                ArrayAdapter<String> aa = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, keywords);

                aa.setDropDownViewResource(
                           android.R.layout.simple_spinner_dropdown_item);
                        s1.setAdapter(aa);
                    }

    public void onItemSelected(AdapterView<?> parent, View v, int position,
            long id) {
        listview.setFilterText(Category[position]);
    }


    public void onNothingSelected(AdapterView<?> parent) {
        listview.setFilterText("");
    }

public void onListItemClick(ListView parent, View v, int position,long id)
        {
            Toast.makeText(this, "You have selected " + Category[position], Toast.LENGTH_SHORT).show();
        }
        }
public class MainActivity extends ListActivity implements
        OnItemSelectedListener {

    String[] Category = { "Singapore discovery Centre",
            "Singapore Science Centre", "Mint Museum", "Singapore Art Museum",
            "Army Museum" };

    String[] keywords = { "Centre", "Museum", "Singapore",

    };
    ArrayList<String> cat = new ArrayList<String>();
    ArrayList<String> mPostingData = new ArrayList<String>();
    Spinner s1;
    ListView listview;
    CustomAdapter cus;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listview = (ListView) findViewById(R.id.listView1);
        s1 = (Spinner) findViewById(R.id.spinner1);
        for (int i = 0; i < Category.length; i++) {
            cat.add(Category[i]);
        }

        // aa = new
        // ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,Category);
        s1.setOnItemSelectedListener(this);
        mPostingData = cat;
        for (int i = 0; i < mPostingData.size(); i++) {
            if (mPostingData.size() > 0)
                Log.i("Datas", mPostingData.get(i));
        }
        cus = new CustomAdapter(this, 0);
        setListAdapter(cus);

        ArrayAdapter<String> aa = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, keywords);

        aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        s1.setAdapter(aa);
    }

    public void onItemSelected(AdapterView<?> parent, View v, int position,
            long id) {
        // listview.setFilterText(Category[position]);
        String Text = s1.getSelectedItem().toString();
        cus.getFilter().filter(Text);
        cus.notifyDataSetChanged();
    }

    public void onNothingSelected(AdapterView<?> parent) {
        // listview.setFilterText("");
    }

    public void onListItemClick(ListView parent, View v, int position, long id) {
        Toast.makeText(this, "You have selected " + mPostingData.get(position),
                Toast.LENGTH_SHORT).show();
    }

    class CustomAdapter extends ArrayAdapter<String> {

        public void setData(ArrayList<String> mPpst) {
            mPostingData = mPpst;// contains class items data.
        }

        @Override
        public Filter getFilter() {
            return new Filter() {
                @Override
                protected void publishResults(CharSequence constraint,
                        FilterResults results) {
                    if (results != null && results.count >= 0) {
                        setData((ArrayList<String>) results.values);
                    } else {
                        setData(cat);// set original values
                    }

                    notifyDataSetInvalidated();
                }

                @Override
                protected FilterResults performFiltering(CharSequence constraint) {
                    FilterResults result = new FilterResults();
                    if (!TextUtils.isEmpty(constraint)) {
                        constraint = constraint.toString();
                        ArrayList<String> foundItems = new ArrayList<String>();
                        if (cat != null) {
                            for (int i = 0; i < cat.size(); i++) {

                                if (cat.get(i).contains(constraint)) {
                                    System.out.println("My datas" + cat.get(i));
                                    foundItems.add(cat.get(i));

                                } else {

                                }
                            }
                        }
                        result.count = foundItems.size();// search results found
                                                            // return count
                        result.values = foundItems;// return values
                    } else {
                        result.count = -1;// no search results found
                    }

                    return result;
                }
            };
        }

        LayoutInflater mInflater;

        public CustomAdapter(Context context, int textViewResourceId) {
            super(context, textViewResourceId);
            // TODO Auto-generated constructor stub
            mInflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return mPostingData.size();
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            ViewHolder vh;
            if (convertView == null) {
                vh = new ViewHolder();
                convertView = mInflater.inflate(R.layout.row, null);
                vh.t1 = (TextView) convertView.findViewById(R.id.textView1);

                convertView.setTag(vh);
            } else {
                // Get the ViewHolder back to get fast access to the TextView
                // and the ImageView.
                vh = (ViewHolder) convertView.getTag();
            }
            if (mPostingData.size() > 0)
                vh.t1.setText(mPostingData.get(position));
            return convertView;
        }

    }

    static class ViewHolder {
        TextView t1;
    }
}
public类MainActivity扩展ListActivity实现
OnItemSelectedListener{
字符串[]类别={“新加坡探索中心”,
“新加坡科学中心”、“造币厂博物馆”、“新加坡艺术博物馆”,
“陆军博物馆”};
字符串[]关键字={“中心”、“博物馆”、“新加坡”,
};
ArrayList cat=新的ArrayList();
ArrayList mPostingData=新的ArrayList();
旋转器s1;
列表视图列表视图;
客户;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview=(listview)findViewById(R.id.listView1);
s1=(喷丝器)findViewById(R.id.spinner1);
对于(int i=0;i0)
Log.i(“数据”,mPostingData.get(i));
}
cus=新的CustomAdapter(这个,0);
setListAdapter(cus);
ArrayAdapter aa=新的ArrayAdapter(此,
android.R.layout.simple\u微调器(项目、关键字);
aa.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
s1.设置适配器(aa);
}
已选择公共位置(AdapterView父视图、视图v、内部位置、,
长id){
//setFilterText(类别[位置]);
String Text=s1.getSelectedItem().toString();
cus.getFilter().filter(文本);
cus.notifyDataSetChanged();
}
未选择公共无效(AdapterView父级){
//listview.setFilterText(“”);
}
public void onListItemClick(ListView父视图、视图v、整数位置、长id){
Toast.makeText(此“您已选择”+mPostingData.get(位置),
吐司。长度(短)。show();
}
类CustomAdapter扩展了ArrayAdapter{
公共无效设置数据(ArrayList mPpst){
mPostingData=mPpst;//包含类项数据。
}
@凌驾
公共过滤器getFilter(){
返回新筛选器(){
@凌驾
受保护的无效发布结果(CharSequence约束,
FilterResults(结果){
if(results!=null&&results.count>=0){
setData((ArrayList)results.values);
}否则{
setData(cat);//设置原始值
}
notifyDataSetionValidated();
}
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults结果=新的FilterResults();
如果(!TextUtils.isEmpty(约束)){
constraint=constraint.toString();
ArrayList foundItems=新建ArrayList();
如果(cat!=null){
对于(int i=0;i0)
vh.t1.setText(mPostingData.get(position));