Java 如何在ListView列表项中添加节标题

Java 如何在ListView列表项中添加节标题,java,android,listview,Java,Android,Listview,我想开发“国家历史”Android应用程序。但我有个问题。我无法将国家/地区标题放在Listview列表项中。我想把标题放进去;例如“非洲:北非”、“撒哈拉以南非洲”、“亚洲”、“北亚”、“西亚和中亚”、“南亚和东南亚”、“欧洲”、“北美和中美洲”、“北美”、“大洋洲”、“南美”。 这里是我的源代码: 这里是我的示例代码: 搜索\u Country.java public class MainActivity extends ActionBarActivity { private L

我想开发“国家历史”Android应用程序。但我有个问题。我无法将国家/地区标题放在Listview列表项中。我想把标题放进去;例如“非洲:北非”、“撒哈拉以南非洲”、“亚洲”、“北亚”、“西亚和中亚”、“南亚和东南亚”、“欧洲”、“北美和中美洲”、“北美”、“大洋洲”、“南美”。
这里是我的源代码:

这里是我的示例代码:

搜索\u Country.java

public class MainActivity extends ActionBarActivity {

    private ListView lvCountry;
    private EditText edtSearch;

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

        edtSearch = (EditText) findViewById(R.id.edtSearch);
        lvCountry = (ListView) findViewById(R.id.lvCountry);

        ArrayList<Item> countryList = new ArrayList<MainActivity.Item>();
        // Header
        countryList.add(new SectionItem("Asia"));
        // State Name
        countryList.add(new EntryItem("India"));
        countryList.add(new EntryItem("China"));
        countryList.add(new EntryItem("Hong Kong"));
        countryList.add(new EntryItem("Nepal"));

        // Header
        countryList.add(new SectionItem("North Asia"));
        // State Name
        countryList.add(new EntryItem("Belarus"));
        countryList.add(new EntryItem("Moldova"));
        countryList.add(new EntryItem("Russian Federation"));
        countryList.add(new EntryItem("Ukraine"));

        // Header
        countryList.add(new SectionItem("North America"));
        // State Name
        countryList.add(new EntryItem("Canada"));
        countryList.add(new EntryItem("Saint Pierre and Miquelon"));
        countryList.add(new EntryItem("United States"));

        // Header
        countryList.add(new SectionItem("North & Central America"));
        // State Name
        countryList.add(new EntryItem("Caribbean Islands"));
        countryList.add(new EntryItem("Anguilla"));
        countryList.add(new EntryItem("Antigua and Barbuda"));
        countryList.add(new EntryItem("Aruba"));

        // set adapter
        final CountryAdapter adapter = new CountryAdapter(this, countryList);
        lvCountry.setAdapter(adapter);
        lvCountry.setTextFilterEnabled(true);

        // filter on text change
        edtSearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if(adapter != null)
                {
                    adapter.getFilter().filter(s.toString());
                }
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
    }

    /**
     * row item
     */
    public interface Item {
        public boolean isSection();
        public String getTitle();
    }

    /**
     * Section Item
     */
    public class SectionItem implements Item {
        private final String title;

        public SectionItem(String title) {
            this.title = title;
        }

        public String getTitle() {
            return title;
        }

        @Override
        public boolean isSection() {
            return true;
        }
    }

    /**
     * Entry Item
     */
    public class EntryItem implements Item {
        public final String title;

        public EntryItem(String title) {
            this.title = title;
        }

        public String getTitle() {
            return title;
        }

        @Override
        public boolean isSection() {
            return false;
        }
    }

    /**
     * Adapter
     */
    public class CountryAdapter extends BaseAdapter {
        private Context context;
        private ArrayList<Item> item;
        private ArrayList<Item> originalItem;

        public CountryAdapter() {
            super();
        }

        public CountryAdapter(Context context, ArrayList<Item> item) {
            this.context = context;
            this.item = item;
            //this.originalItem = item;
        }

        @Override
        public int getCount() {
            return item.size();
        }

        @Override
        public Object getItem(int position) {
            return item.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            if (item.get(position).isSection()) {
                // if section header
                convertView = inflater.inflate(R.layout.layout_section, parent, false);
                TextView tvSectionTitle = (TextView) convertView.findViewById(R.id.tvSectionTitle);
                tvSectionTitle.setText(((SectionItem) item.get(position)).getTitle());
            }
            else
            {
                // if item
                convertView = inflater.inflate(R.layout.layout_item, parent, false);
                TextView tvItemTitle = (TextView) convertView.findViewById(R.id.tvItemTitle);
                tvItemTitle.setText(((EntryItem) item.get(position)).getTitle());
            }

            return convertView;
        }

        /**
         * Filter
         */
        public Filter getFilter()
        {
            Filter filter = new Filter() {

                @SuppressWarnings("unchecked")
                @Override
                protected void publishResults(CharSequence constraint, FilterResults results) {

                    item = (ArrayList<Item>) results.values;
                    notifyDataSetChanged();
                }

                @SuppressWarnings("null")
                @Override
                protected FilterResults performFiltering(CharSequence constraint) {

                    FilterResults results = new FilterResults();
                    ArrayList<Item> filteredArrayList = new ArrayList<Item>();


                    if(originalItem == null || originalItem.size() == 0)
                    {
                        originalItem = new ArrayList<Item>(item);
                    }

                    /*
                     * if constraint is null then return original value
                     * else return filtered value
                     */
                    if(constraint == null && constraint.length() == 0)
                    {
                        results.count = originalItem.size();
                        results.values = originalItem;
                    }
                    else
                    {
                        constraint = constraint.toString().toLowerCase(Locale.ENGLISH);
                        for (int i = 0; i < originalItem.size(); i++) 
                        {
                            String title = originalItem.get(i).getTitle().toLowerCase(Locale.ENGLISH);
                            if(title.startsWith(constraint.toString()))
                            {
                                filteredArrayList.add(originalItem.get(i));
                            }
                        }
                        results.count = filteredArrayList.size();
                        results.values = filteredArrayList;
                    }

                    return results;
                }
            };

            return filter;
        }
    }

}
package com.nasir.search;
导入java.util.ArrayList;
导入java.util.array;
导入android.app.Activity;
导入android.app.ListActivity;
导入android.content.Intent;
导入android.os.Bundle;
导入android.text.Editable;
导入android.text.TextWatcher;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.BaseAdapter;
导入android.widget.EditText;
导入android.widget.ListView;
导入android.widget.TextView;
公共类搜索\u国家/地区扩展列表活动{
私人编辑文本搜索文本;
私有ListView ListText;
私有字符串[]编号\u列表={
//非洲:北非
“阿尔及利亚”、“埃及”、“利比亚”、“摩洛哥”、“突尼斯”、“西撒哈拉”,
//撒哈拉以南非洲
“安哥拉”、“贝宁”、“博茨瓦纳”、“布基纳法索”、“布隆迪”、“喀麦隆”、“佛得角”、“乍得”、“科摩罗”、“刚果”,
“科特迪瓦”、“吉布提”、“赤道几内亚”、“厄立特里亚”、“埃塞俄比亚”、“加蓬”、“冈比亚”、“加纳”、“几内亚”、“肯尼亚”,
“莱索托”、“利比里亚”、“马达加斯加”、“马拉维”、“马里”、“毛里塔尼亚”、“毛里求斯”、“马约特”、“莫桑比克”、“纳米比亚”,
“尼日尔”、“尼日利亚”、“卢旺达”、“塞内加尔”、“塞舌尔”、“塞拉利昂”、“索马里”、“南非”、“南苏丹”,
“苏丹”、“斯威士兰”、“乌干达”、“赞比亚”、“津巴布韦”,
//亚洲:
//东亚
“中国”、“香港”、“日本”、“韩国”、“澳门”、“蒙古”、“台湾”,
//北亚
“白俄罗斯”、“摩尔多瓦”、“俄罗斯联邦”、“乌克兰”,
//西亚和中亚
“阿富汗”、“亚美尼亚”、“阿塞拜疆”、“巴林”、“塞浦路斯”、“格鲁吉亚”、“伊朗”、“伊拉克”、“以色列”、“约旦”、“哈萨克斯坦”,
“科威特”、“吉尔吉斯斯坦”、“黎巴嫩”、“阿曼”、“巴基斯坦”、“卡塔尔”、“沙特阿拉伯”、“塔吉克斯坦”、“土耳其”、“土库曼斯坦”,
“阿拉伯联合酋长国”、“乌兹别克斯坦”、“也门”,
//南亚和东南亚
“孟加拉国”、“不丹”、“文莱”、“柬埔寨”、“印度”、“印度尼西亚”、“马来西亚”、“马尔代夫”、“缅甸”、“尼泊尔”,
“菲律宾”、“新加坡”、“斯里兰卡”、“泰国”、“东帝汶”、“越南”,
//欧洲
“奥兰群岛”、“阿尔巴尼亚”、“安道尔”、“奥地利”、“比利时”、“波斯尼亚和黑塞哥维那”、“保加利亚”、“克罗地亚”,
“捷克共和国”、“丹麦”、“爱沙尼亚”、“法罗群岛”、“芬兰”、“法国”、“德国”、“直布罗陀”、“希腊”,
格陵兰岛、根西岛、匈牙利、冰岛、爱尔兰、泽西岛、拉脱维亚、列支敦士登、,
“立陶宛”、“卢森堡”、“马其顿”、“摩纳哥”、“黑山”、“荷兰”、“挪威”、“波兰”、“葡萄牙”,
“罗马尼亚”、“圣马力诺”、“塞尔维亚”、“斯洛伐克”、“斯洛文尼亚”、“西班牙”、“斯瓦尔巴群岛和扬马延”、“瑞典”、“瑞士”,
“联合王国”,
//北美和中美洲
“加勒比群岛”、“安圭拉”、“安提瓜和巴布达”、“阿鲁巴”、“巴哈马”、“巴巴多斯”、“百慕大”、“开曼群岛”,
“博内尔”、“古巴”、“多米尼克”、“库拉索岛”、“瓜德罗普岛”、“海地”、“牙买加”、“马提尼克岛”、“蒙特塞拉特”、“波多黎各”,
“圣巴塞勒米”、“圣基茨和尼维斯”、“圣卢西亚”、“圣马丁(法语部分)”、“圣文森特和格林纳丁斯”,
“圣马丁岛(荷兰部分)”、“特立尼达和多巴哥”、“特克斯和凯科斯群岛”、“英属维尔京群岛”、“美国维尔京群岛”,
//中美洲(或中美洲)
“伯利兹”、“哥斯达黎加”、“萨尔瓦多”、“危地马拉”、“洪都拉斯”、“墨西哥”、“尼加拉瓜”、“巴拿马”,
//北美
“加拿大”、“圣皮埃尔和米克隆”、“美国”,
//大洋洲
“美属萨摩亚”、“澳大利亚”、“圣诞岛”、“科科斯(基林)群岛”、“库克群岛”、“斐济”、“关岛”、“基里巴斯”,
“马绍尔群岛”、“密克罗尼西亚”、“新喀里多尼亚”、“新西兰”、“纽埃岛”、“诺福克岛”、“北马里亚纳群岛”,
“帕劳”、“巴布亚新几内亚”、“皮特凯恩”、“萨摩亚”、“所罗门群岛”、“托克劳”、“汤加”、“图瓦卢”、“美国小离岛”,
“瓦努阿图”、“瓦利斯和富图纳”,
//南美洲
“阿根廷”、“玻利维亚”、“巴西”、“智利”、“哥伦比亚”、“厄瓜多尔”、“福克兰群岛(马尔维纳斯)”、“法属圭亚那”、“圭亚那”,
“巴拉圭”、“秘鲁”、“苏里南”、“乌拉圭”、“委内瑞拉”};
私有数组列表数组_排序;
int textlength=0;
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.search_country);
SearchText=(EditText)findViewById(R.id.listview\u search);
ListText=(ListView)findViewById(android.R.id.list);
array_sort=newarraylist(Arrays.asList(Number_List));
setListAdapter(新bsAdapter(this));
SearchText.addTextChangedListener(新的TextWatcher()
{
公共无效后文本已更改(可编辑)
{
}
更改前文本之前的公共void(字符序列s、int start、int count、int after)
{
}
public void onTextChanged(字符序列、int start、int before、int count)
{
textlength=SearchText.getText().length();
数组_sort.clear();
对于(int i=0;i如果(文本长度屏幕截图

活动\u main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/edtSearch"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:hint="Search..."
        android:padding="10dp" />

    <ListView
        android:id="@+id/lvCountry"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>

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

    <TextView
        android:id="@+id/tvItemTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="Item" />

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#D8D8D8"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tvSectionTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:padding="10dp"
        android:text="Section"
        android:textStyle="bold" />

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.sectionheader"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:windowSoftInputMode="stateHidden|adjustPan"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

layout\u item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/edtSearch"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:hint="Search..."
        android:padding="10dp" />

    <ListView
        android:id="@+id/lvCountry"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>

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

    <TextView
        android:id="@+id/tvItemTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="Item" />

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#D8D8D8"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tvSectionTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:padding="10dp"
        android:text="Section"
        android:textStyle="bold" />

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.sectionheader"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:windowSoftInputMode="stateHidden|adjustPan"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

layout\u section.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/edtSearch"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:hint="Search..."
        android:padding="10dp" />

    <ListView
        android:id="@+id/lvCountry"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>

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

    <TextView
        android:id="@+id/tvItemTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="Item" />

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#D8D8D8"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tvSectionTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:padding="10dp"
        android:text="Section"
        android:textStyle="bold" />

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.sectionheader"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:windowSoftInputMode="stateHidden|adjustPan"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

MainActivity.java

public class MainActivity extends ActionBarActivity {

    private ListView lvCountry;
    private EditText edtSearch;

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

        edtSearch = (EditText) findViewById(R.id.edtSearch);
        lvCountry = (ListView) findViewById(R.id.lvCountry);

        ArrayList<Item> countryList = new ArrayList<MainActivity.Item>();
        // Header
        countryList.add(new SectionItem("Asia"));
        // State Name
        countryList.add(new EntryItem("India"));
        countryList.add(new EntryItem("China"));
        countryList.add(new EntryItem("Hong Kong"));
        countryList.add(new EntryItem("Nepal"));

        // Header
        countryList.add(new SectionItem("North Asia"));
        // State Name
        countryList.add(new EntryItem("Belarus"));
        countryList.add(new EntryItem("Moldova"));
        countryList.add(new EntryItem("Russian Federation"));
        countryList.add(new EntryItem("Ukraine"));

        // Header
        countryList.add(new SectionItem("North America"));
        // State Name
        countryList.add(new EntryItem("Canada"));
        countryList.add(new EntryItem("Saint Pierre and Miquelon"));
        countryList.add(new EntryItem("United States"));

        // Header
        countryList.add(new SectionItem("North & Central America"));
        // State Name
        countryList.add(new EntryItem("Caribbean Islands"));
        countryList.add(new EntryItem("Anguilla"));
        countryList.add(new EntryItem("Antigua and Barbuda"));
        countryList.add(new EntryItem("Aruba"));

        // set adapter
        final CountryAdapter adapter = new CountryAdapter(this, countryList);
        lvCountry.setAdapter(adapter);
        lvCountry.setTextFilterEnabled(true);

        // filter on text change
        edtSearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if(adapter != null)
                {
                    adapter.getFilter().filter(s.toString());
                }
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
    }

    /**
     * row item
     */
    public interface Item {
        public boolean isSection();
        public String getTitle();
    }

    /**
     * Section Item
     */
    public class SectionItem implements Item {
        private final String title;

        public SectionItem(String title) {
            this.title = title;
        }

        public String getTitle() {
            return title;
        }

        @Override
        public boolean isSection() {
            return true;
        }
    }

    /**
     * Entry Item
     */
    public class EntryItem implements Item {
        public final String title;

        public EntryItem(String title) {
            this.title = title;
        }

        public String getTitle() {
            return title;
        }

        @Override
        public boolean isSection() {
            return false;
        }
    }

    /**
     * Adapter
     */
    public class CountryAdapter extends BaseAdapter {
        private Context context;
        private ArrayList<Item> item;
        private ArrayList<Item> originalItem;

        public CountryAdapter() {
            super();
        }

        public CountryAdapter(Context context, ArrayList<Item> item) {
            this.context = context;
            this.item = item;
            //this.originalItem = item;
        }

        @Override
        public int getCount() {
            return item.size();
        }

        @Override
        public Object getItem(int position) {
            return item.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            if (item.get(position).isSection()) {
                // if section header
                convertView = inflater.inflate(R.layout.layout_section, parent, false);
                TextView tvSectionTitle = (TextView) convertView.findViewById(R.id.tvSectionTitle);
                tvSectionTitle.setText(((SectionItem) item.get(position)).getTitle());
            }
            else
            {
                // if item
                convertView = inflater.inflate(R.layout.layout_item, parent, false);
                TextView tvItemTitle = (TextView) convertView.findViewById(R.id.tvItemTitle);
                tvItemTitle.setText(((EntryItem) item.get(position)).getTitle());
            }

            return convertView;
        }

        /**
         * Filter
         */
        public Filter getFilter()
        {
            Filter filter = new Filter() {

                @SuppressWarnings("unchecked")
                @Override
                protected void publishResults(CharSequence constraint, FilterResults results) {

                    item = (ArrayList<Item>) results.values;
                    notifyDataSetChanged();
                }

                @SuppressWarnings("null")
                @Override
                protected FilterResults performFiltering(CharSequence constraint) {

                    FilterResults results = new FilterResults();
                    ArrayList<Item> filteredArrayList = new ArrayList<Item>();


                    if(originalItem == null || originalItem.size() == 0)
                    {
                        originalItem = new ArrayList<Item>(item);
                    }

                    /*
                     * if constraint is null then return original value
                     * else return filtered value
                     */
                    if(constraint == null && constraint.length() == 0)
                    {
                        results.count = originalItem.size();
                        results.values = originalItem;
                    }
                    else
                    {
                        constraint = constraint.toString().toLowerCase(Locale.ENGLISH);
                        for (int i = 0; i < originalItem.size(); i++) 
                        {
                            String title = originalItem.get(i).getTitle().toLowerCase(Locale.ENGLISH);
                            if(title.startsWith(constraint.toString()))
                            {
                                filteredArrayList.add(originalItem.get(i));
                            }
                        }
                        results.count = filteredArrayList.size();
                        results.values = filteredArrayList;
                    }

                    return results;
                }
            };

            return filter;
        }
    }

}
公共类MainActivity扩展了ActionBarActivity{
国家私有列表视图;
私人编辑文本搜索;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
苏