当我使用简单适配器进行列表视图时,如何在列表视图中搜索?

时间:2012-10-10 09:18:48

标签: android filter android-listview

当我使用简单适配器时,我在listview中创建搜索栏。我使用以下代码。执行此代码时,它显示空指针异常。

String headlines1[]={"Dell Inspiron", "HTC One X", "HTC Wildfire S", "HTC Sense", "HTC Sensation XE", "iPhone 4S", "Samsung Galaxy Note 800", "Samsung Galaxy S3", "MacBook Air", "Mac Mini", "MacBook Pro"};}
for (int j = 0; j < headlines1.length; j++)

            {

                HashMap<String, String> map = new HashMap<String, String>();
                map.put("row1", ":"+headlines1[j]);



                mylistData.add(map);

            }
        SimpleAdpter arrayAdapter =

            new SimpleAdapter(this, mylistData, R.layout.simple_list_item_2,

            row, new int[] { R.id.tv });
            lst.setAdapter(arrayAdapter);

             lst.setTextFilterEnabled(true);

             inputsearch.addTextChangedListener(new TextWatcher()
            {


                @Override
                public void onTextChanged( CharSequence cs, int arg1, int arg2, int arg3)
                {
                    // TODO Auto-generated method stub
                     String searchString=inputsearch.getText().toString();
                       int textLength=searchString.length();

                              //clear the initial data set
                       searchResults.clear();

                       for(int i=0;i<mylistData.size();i++)
                       {
                      String playerName=mylistData.get(i).get("row1").toString();
                      if(textLength<=playerName.length()){
                      //compare the String in EditText with Names in the ArrayList
                        if(searchString.equalsIgnoreCase(playerName.substring(0,textLength)))
                        searchResults.add(mylistData.get(i));
                      }
                       }

                       arrayAdapter.notifyDataSetChanged();
                }

1 个答案:

答案 0 :(得分:1)

试试这个

   public class MainActivity extends Activity {

private ListView lv;
private EditText et;
//private String listview_array[] = { "ONE", "TWO", "THREE", "FOUR", "FIVE","SIX", "SEVEN", "EIGHT", "NINE", "TEN" };
String listview_array[]={"Dell Inspiron", "HTC One X", "HTC Wildfire S", "HTC Sense", "HTC Sensation XE", "iPhone 4S", "Samsung Galaxy Note 800", "Samsung Galaxy S3", "MacBook Air", "Mac Mini", "MacBook Pro"};
private ArrayList<String> array_sort = new ArrayList<String>();
int textlength = 0;

public void onCreate(Bundle savedInstanceState)

{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    lv = (ListView) findViewById(R.id.ListView01);
    et = (EditText) findViewById(R.id.EditText01);
    lv.setAdapter(new ArrayAdapter<String>(this,
    android.R.layout.simple_list_item_1, listview_array));
    et.addTextChangedListener(new TextWatcher()
    {
        public void afterTextChanged(Editable s)
        {
            // Abstract Method of TextWatcher Interface.

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

            // Abstract Method of TextWatcher Interface.

        }
        public void onTextChanged(CharSequence s,
        int start, int before, int count)
        {
            textlength = et.getText().length();
            array_sort.clear();
            for (int i = 0; i < listview_array.length; i++)
            {
                if (textlength <= listview_array[i].length())
                {
                    if (et.getText().toString().equalsIgnoreCase(
                    (String)
                    listview_array[i].subSequence(0,
                    textlength)))
                    {
                        array_sort.add(listview_array[i]);
                    }
                }
            }

            lv.setAdapter(new ArrayAdapter<String>
            (MainActivity.this,
            android.R.layout.simple_list_item_1, array_sort));
        }
    });
}
  }