2013-11-20 136 views
0

我目前正在尝试搜索数组列表并显示匹配用户查询的结果。我一直在得到一个ConcurrentModificationException,并不知道如何解决它。在我的搜索活动的代码如下:Android搜索字符串数组

public class SearchActivity extends Activity { 

ListView l; 

String[] testArray; 
List<String> testArrayList; 
ArrayAdapter<String> adapter; 

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

    testArray = getResources().getStringArray(R.array.list); 
    testArrayList = new ArrayList<String>(Arrays.asList(testArray)); 

    l = (ListView) findViewById(R.id.list); 
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, testArrayList); 
    l.setAdapter(adapter); 

    handleIntent(getIntent()); 
} 

protected void onNewIntent(Intent intent) { 
    handleIntent(intent); 
} 

private void handleIntent(Intent intent) { 
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
     String query = intent.getStringExtra(SearchManager.QUERY); 
     //Log.d("Event", query); 

     search(query); 
    } 
} 

private void search(String query){ 

    for (String element : testArrayList) { 
     if (!element.contains(query)) { 
      testArrayList.remove(element); 
     } 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.search, menu); 

    return true; 
} 

}

回答

0

的问题是在这里:

for (String element : testArrayList) { 
    if (!element.contains(query)) { 
     testArrayList.remove(element); 
    } 
} 

你不应该删除,同时遍历集合元素,将其更改为这样的事情(未经测试):

Iterator<String> iter = testArrayList.iterator(); 
while(iter.hasNext()){ 
    if (!iter.next().contains(query)) { 
     iter.remove(); 
}