且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何添加章节标题中的ListView列表项

更新时间:2023-12-05 16:19:34

屏幕快照

如何添加章节标题中的ListView列表项

activity_main.xml

 < LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:方向=垂直>

    <的EditText
        机器人:ID =@ + ID / edtSe​​arch
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT
        机器人:重力=center_vertical
        机器人:提示=搜索...
        机器人:填充=10dp/>

    <的ListView
        机器人:ID =@ + ID / lvCountry
        机器人:layout_width =match_parent
        机器人:layout_height =match_parent>
    < / ListView控件>

< / LinearLayout中>
 

layout_item.xml

 < XML版本=1.0编码=UTF-8&GT?;
< LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:方向=垂直>

    <的TextView
        机器人:ID =@ + ID / tvItemTitle
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:填充=10dp
        机器人:文本=项目/>

< / LinearLayout中>
 

layout_section.xml

 < XML版本=1.0编码=UTF-8&GT?;
< LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:后台=#D8D8D8
    机器人:方向=垂直>

    <的TextView
        机器人:ID =@ + ID / tvSectionTitle
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_gravity =center_horizo​​ntal
        机器人:填充=10dp
        机器人:文本=节
        机器人:TEXTSTYLE =黑体/>

< / LinearLayout中>
 

MainActivity.java

 公共类MainActivity扩展ActionBarActivity {

    私人的ListView lvCountry;
    私人的EditText edtSe​​arch;

    @覆盖
    保护无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);

        edtSe​​arch =(EditText上)findViewById(R.id.edtSe​​arch);
        lvCountry =(ListView控件)findViewById(R.id.lvCountry);

        ArrayList的<项目> countryList =新的ArrayList< MainActivity.Item>();
        //头
        countryList.add(新SectionItem(亚洲));
        //国家名称
        countryList.add(新EntryItem(印度));
        countryList.add(新EntryItem(中国));
        countryList.add(新EntryItem(「***」));
        countryList.add(新EntryItem(尼));

        //头
        countryList.add(新SectionItem(北亚));
        //国家名称
        countryList.add(新EntryItem(白俄罗斯));
        countryList.add(新EntryItem(摩的));
        countryList.add(新EntryItem(俄罗斯联邦));
        countryList.add(新EntryItem(乌克兰));

        //头
        countryList.add(新SectionItem(北美));
        //国家名称
        countryList.add(新EntryItem(加拿大));
        countryList.add(新EntryItem(圣皮埃尔和密克隆群岛));
        countryList.add(新EntryItem(美国));

        //头
        countryList.add(新SectionItem(北美和放大器;中美洲));
        //国家名称
        countryList.add(新EntryItem(加勒比海岛));
        countryList.add(新EntryItem(安圭拉));
        countryList.add(新EntryItem(安提瓜和巴布达));
        countryList.add(新EntryItem(阿鲁巴));

        //设置适配器
        最后CountryAdapter适配器=新CountryAdapter(这一点,countryList);
        lvCountry.setAdapter(适配器);
        lvCountry.setTextFilterEnabled(真正的);

        //文本更换过滤器
        edtSe​​arch.addTextChangedListener(新TextWatcher(){

            @覆盖
            公共无效onTextChanged(CharSequence中,诠释开始,诠释之前,诠释计数){
                如果(适配器!= NULL)
                {
                    。adapter.getFilter()滤波器(s.toString());
                }
            }

            @覆盖
            公共无效beforeTextChanged(CharSequence中,诠释开始,诠释计数,之后INT){
            }

            @覆盖
            公共无效afterTextChanged(编辑S){
            }
        });
    }

    / **
     *行项目
     * /
    公共接口项目{
        公共布尔isSection();
        公共字符串的getTitle();
    }

    / **
     *部分项目
     * /
    公共类SectionItem实现项目{
        私人最终字符串称号;

        公共SectionItem(字符串名称){
            this.title =称号;
        }

        公共字符串的getTitle(){
            返回称号;
        }

        @覆盖
        公共布尔isSection(){
            返回true;
        }
    }

    / **
     *参赛作品
     * /
    公共类EntryItem实现项目{
        公共最后弦乐称号;

        公共EntryItem(字符串名称){
            this.title =称号;
        }

        公共字符串的getTitle(){
            返回称号;
        }

        @覆盖
        公共布尔isSection(){
            返回false;
        }
    }

    / **
     * 适配器
     * /
    公共类CountryAdapter扩展了BaseAdapter {
        私人上下文的背景下;
        私人的ArrayList<项目>项目;
        私人的ArrayList<项目> originalItem;

        公共CountryAdapter(){
            超();
        }

        公共CountryAdapter(上下文的背景下,ArrayList的<项目>项目){
            this.context =背景;
            this.item =项目;
            //this.originalItem =项目;
        }

        @覆盖
        公众诠释getCount将(){
            返回item.size();
        }

        @覆盖
        公共对象的getItem(INT位置){
            返回item.get(位置);
        }

        @覆盖
        众长getItemId(INT位置){
            返回的位置;
        }

        @覆盖
        公共查看getView(INT位置,查看convertView,父母的ViewGroup)
        {
            LayoutInflater充气=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            如果(item.get(位置).isSection()){
                //如果节头
                convertView = inflater.inflate(R.layout.layout_section,父母,假);
                TextView的tvSectionTitle =(TextView中)convertView.findViewById(R.id.tvSectionTitle);
                tvSectionTitle.setText(((SectionItem)item.get(位置))的getTitle()。);
            }
            其他
            {
                //如果条目
                convertView = inflater.inflate(R.layout.layout_item,父母,假);
                TextView的tvItemTitle =(TextView中)convertView.findViewById(R.id.tvItemTitle);
                tvItemTitle.setText(((EntryItem)item.get(位置))的getTitle()。);
            }

            返回convertView;
        }

        / **
         * 过滤
         * /
        公共过滤用getFilter()
        {
            过滤器过滤器=新的过滤器(){

                @燮pressWarnings(未登记)
                @覆盖
                保护无效publishResults(CharSequence的约束,FilterResults结果){

                    项目=(ArrayList的<项目>)results.values​​;
                    notifyDataSetChanged();
                }

                @燮pressWarnings(空)
                @覆盖
                保护FilterResults performFiltering(CharSequence的约束){

                    FilterResults结果=新FilterResults();
                    ArrayList的<项目> filteredArrayList =新的ArrayList<项目>();


                    如果(originalItem == NULL || originalItem.size()== 0)
                    {
                        originalItem =新的ArrayList<项目>(项目);
                    }

                    / *
                     *如果约束为null,则返回原来的价值
                     *否则返回滤波值
                     * /
                    如果(约束== NULL和放大器;&安培; constraint.length()== 0)
                    {
                        results.count = originalItem.size();
                        results.values​​ = originalItem;
                    }
                    其他
                    {
                        约束= constraint.toString()与toLowerCase(Locale.ENGLISH)。
                        的for(int i = 0; I< originalItem.size();我++)
                        {
                            。字符串title = originalItem.get(我).getTitle()与toLowerCase(Locale.ENGLISH);
                            如果(title.startsWith(constraint.toString()))
                            {
                                filteredArrayList.add(originalItem.get(ⅰ));
                            }
                        }
                        results.count = filteredArrayList.size();
                        results.values​​ = filteredArrayList;
                    }

                    返回结果;
                }
            };

            返回过滤器;
        }
    }

}
 

AndroidManifest.xml中

 < XML版本=1.0编码=UTF-8&GT?;
<舱单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    包=com.sectionheader
    安卓版code =1
    机器人:VERSIONNAME =1.0>

    <用途-SDK
        安卓的minSdkVersion =11
        机器人:targetSdkVersion =21/>

    <应用
        机器人:allowBackup =真
        机器人:图标=@可绘制/ ic_launcher
        机器人:标签=@字符串/ APP_NAME
        机器人:主题=@风格/ AppTheme>
        <活动
            机器人:名称=。MainActivity
            机器人:windowSoftInputMode =stateHidden | adjustPan
            机器人:标签=@字符串/ APP_NAME>
            <意向滤光器>
                <作用机器人:名称=android.intent.action.MAIN/>

                <类机器人:名称=android.intent.category.LAUNCHER/>
            &所述; /意图滤光器>
        < /活性GT;
    < /用途>

< /舱单>
 

I want to Develop "History of Country" Android Application. But I have a problem. I can not put Country Header in Listview List Item. I want to put Header; Such as "Africa : North Africa", "Sub-Saharan Africa", "Asia", "North Asia", "West & Central Asia", "South & Southeast Asia", "Europe", "North & Central America", "North America", "Oceania", "South America".
Here My Source Code :
https://www.dropbox.com/s/k66xonom9up1yif/Country%20Search%20ListView.zip?dl=0
Here my Sample code:

Search_Country.java

package com.nasir.search;

import java.util.ArrayList;
import java.util.Arrays;

import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;


public class Search_Country extends ListActivity {
	
	private EditText SearchText;
	private ListView ListText;
	
	private String[] Number_List = {
		// Africa : North Africa
		"Algeria", "Egypt", "Libya", "Morocco", "Tunisia", "Western Sahara", 

		// Sub-Saharan Africa
		"Angola", "Benin", "Botswana", "Burkina Faso", "Burundi", "Cameroon", "Cape Verde", "Chad", "Comoros", "Congo", 
		"Côte d'Ivoire", "Djibouti", "Equatorial Guinea", "Eritrea", "Ethiopia", "Gabon", "Gambia", "Ghana", "Guinea", "Kenya",
		"Lesotho", "Liberia", "Madagascar", "Malawi", "Mali", "Mauritania", "Mauritius", "Mayotte", "Mozambique", "Namibia", 
		"Niger", "Nigeria", "Rwanda", "Senegal", "Seychelles", "Sierra Leone", "Somalia", "South Africa", "South Sudan", 
		"Sudan", "Swaziland", "Uganda", "Zambia", "Zimbabwe", 
		
		// Asia : 
		// East Asia
		"China", "***", "Japan", "Korea", "Macao", "***", "***", 
		
		// North Asia
		"Belarus", "Moldova", "Russian Federation", "Ukraine", 
		
		// West & Central Asia
		"Afghanistan", "Armenia", "Azerbaijan", "Bahrain", "Cyprus", "Georgia", "Iran", "Iraq", "Israel", "Jordan", "Kazakhstan",
		"Kuwait", "Kyrgyzstan", "Lebanon", "Oman", "Pakistan", "Qatar", "Saudi Arabia", "Tajikistan", "Turkey", "Turkmenistan", 
		"United Arab Emirates", "Uzbekistan", "Yemen", 
		
		// South & Southeast Asia
		"Bangladesh", "Bhutan", "Brunei", "Cambodia", "India", "Indonesia", "Malaysia", "Maldives", "Myanmar", "Nepal", 
		"Philippines", "Singapore", "Sri Lanka", "Thailand", "Timor-Leste", "Viet Nam", 
		
		// Europe
		"Åland Islands", "Albania", "Andorra", "Austria", "Belgium", "Bosnia and Herzegovina", "Bulgaria", "Croatia", 
		"Czech Republic", "Denmark", "Estonia", "Faroe Islands", "Finland", "France", "Germany", "Gibraltar", "Greece", 
		"Greenland", "Guernsey", "Hungary", "Iceland", "", "", "", "", "Ireland", "Jersey", "Latvia", "Liechtenstein", 
		"Lithuania", "Luxembourg", "Macedonia", "Monaco", "Montenegro", "Netherlands", "Norway", "Poland", "Portugal", 
		"Romania", "San Marino", "Serbia", "Slovakia", "Slovenia", "Spain", "Svalbard and Jan Mayen", "Sweden", "Switzerland", 
		"United Kingdom", 
		
		// North & Central America
		"Caribbean Islands", "Anguilla", "Antigua and Barbuda", "Aruba", "Bahamas", "Barbados", "Bermuda", "Cayman Islands", 
		"Bonaire", "Cuba", "Dominica", "Curaçao", "Guadeloupe", "Haiti", "Jamaica", "Martinique", "Montserrat", "Puerto Rico", 
		"Saint Bathélemy", "Saint Kitts and Nevis", "Saint Lucia", "Saint Martin (French Part)", "Saint Vincent and the Grenadines",
		"Sint Maarten (Dutch Part)", "Trinidad and Tobago", "Turks and Caicos Islands", "Virgin Islands, British", "Virgin Islands, U.S.",
		
		// Mesoamerica (or Central America)
		"Belize", "Costa Rica", "El Salvador", "Guatemala", "Honduras", "Mexico", "Nicaragua", "Panama",
		
		// North America
		"Canada", "Saint Pierre and Miquelon", "United States", 

		// Oceania
		"American Samoa", "Australia", "Christmas Island", "Cocos (Keeling) Islands", "Cook Islands", "Fiji", "Guam", "Kiribati",
		"Marshall Islands", "Micronesia", "New Caledonia", "New Zealand", "Niue", "Norfolk Island", "Northern Mariana Islands", 
		"Palau", "Papua New Guinea", "Pitcairn", "Samoa", "Solomon Islands", "Tokelau", "Tonga", "Tuvalu", "United States Minor Outlying Islands",
		"Vanuatu", "Wallis and Futuna", 

		// South America
		"Argentina", "Bolivia", "Brazil", "Chile", "Colombia", "Ecuador", "Falkland Islands (Malvinas)", "French Guiana", "Guyana",
		"Paraguay", "Peru", "Suriname", "Uruguay", "Venezuela"};
	
	private ArrayList<String> array_sort;
	int textlength = 0;

	public void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.search_country);

		SearchText = (EditText) findViewById(R.id.listview_search);
		ListText = (ListView) findViewById(android.R.id.list);

		array_sort = new ArrayList<String>(Arrays.asList(Number_List));
		setListAdapter(new bsAdapter(this));

		SearchText.addTextChangedListener(new TextWatcher()
		{
			public void afterTextChanged(Editable s) 
			{

			}

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

			}

			public void onTextChanged(CharSequence s, int start, int before, int count)
			{
				textlength = SearchText.getText().length();
				array_sort.clear();
				for (int i = 0; i < Number_List.length; i++) 
				{
					if (textlength <= Number_List[i].length()) 
					{						
						if(Number_List[i].toUpperCase().contains(SearchText.getText().toString().toUpperCase().trim()))
						{
							array_sort.add(Number_List[i]);
						}
					}
				}
				AppendList(array_sort);
			}
		});

		ListText.setOnItemClickListener(new OnItemClickListener() 
		{
			public void onItemClick(AdapterView<?> parent, View view,
				 int position, long id) {
				if( array_sort.get(position).equals("Afghanistan")){
				    Intent intent = new Intent(Search_Country.this, Country_Details.class);                            
				    intent.putExtra("header", getString(R.string.html_afganistan));                                       
				    startActivity(intent);
				}
				else if ( array_sort.get(position).equals("Albania")){
					Intent intent = new Intent(Search_Country.this, Country_Details.class);
					intent.putExtra("header", getString(R.string.html_albenia));
					startActivity(intent);
				}
				
				else if ( array_sort.get(position).equals("Algeria")){
					Intent intent = new Intent(Search_Country.this, Country_Details.class);
					intent.putExtra("header", getString(R.string.html_algeria));
					startActivity(intent);
				}
				
				else if ( array_sort.get(position).equals("Brazil")){
					Intent intent = new Intent(Search_Country.this, Country_Details.class);
					intent.putExtra("header", getString(R.string.html_brazil));
					startActivity(intent);
				}
				
			}
		});
	}

	public void AppendList(ArrayList<String> str) 
	{
		setListAdapter(new bsAdapter(this));
	}

	public class bsAdapter extends BaseAdapter 
	{
		Activity cntx;

		public bsAdapter(Activity context) 
		{
			this.cntx = context;
		}

		public int getCount()
		{
			return array_sort.size();
		}

		public Object getItem(int position) 
		{
			return array_sort.get(position);
		}

		public long getItemId(int position)
		{
			return array_sort.size();
		}

		public View getView(final int position, View convertView, ViewGroup parent) 
		{
			View row = null;
			LayoutInflater inflater = cntx.getLayoutInflater();
			row = inflater.inflate(R.layout.search_country_listview, null);
			TextView tv = (TextView) row.findViewById(R.id.listview_seacrh_text);
			tv.setText(array_sort.get(position));
			return row;
		}
	}
}

Screen Shot

activity_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>

layout_item.xml

<?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>

layout_section.xml

<?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>

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("***"));
        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;
        }
    }

}

AndroidManifest.xml

<?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>