当我使用listview的简单适配器时,如何在listview中搜索?

时间:2012-10-10 09:51:12

标签: android

当我使用简单的适配器时,我在列表视图中创建了一个搜索栏。我使用以下代码。执行此代码时,它显示空指针异常。任何人都可以帮助我吗?提前谢谢。

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);
}

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