Java Android搜索字符串数组
我目前正在尝试搜索数组列表,并显示与用户查询匹配的结果。我不断收到ConcurrentModificationException,不知道如何修复它。我的可搜索活动中的代码如下:Java Android搜索字符串数组,java,android,search,Java,Android,Search,我目前正在尝试搜索数组列表,并显示与用户查询匹配的结果。我不断收到ConcurrentModificationException,不知道如何修复它。我的可搜索活动中的代码如下: public class SearchActivity extends Activity { ListView l; String[] testArray; List<String> testArrayList; ArrayAdapter<String> adapter; @Override
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;
}
公共类SearchActivity扩展活动{
列表视图l;
字符串[]测试数组;
列出测试列表;
阵列适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u search);
testArray=getResources().getStringArray(R.array.list);
testArrayList=新的ArrayList(Arrays.asList(testArray));
l=(ListView)findViewById(R.id.list);
adapter=new ArrayAdapter(这是android.R.layout.simple_list_item_1,testArrayList);
l、 设置适配器(适配器);
handleIntent(getIntent());
}
受保护的void onNewIntent(意图){
手册内容(意图);
}
私人无效手册内容(意图){
if(Intent.ACTION_SEARCH.equals(Intent.getAction())){
String query=intent.getStringExtra(SearchManager.query);
//Log.d(“事件”,查询);
搜索(查询);
}
}
专用无效搜索(字符串查询){
for(字符串元素:testArrayList){
如果(!element.contains(查询)){
testArrayList.remove(元素);
}
}
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.search,menu);
返回true;
}
}问题在于:
for (String element : testArrayList) {
if (!element.contains(query)) {
testArrayList.remove(element);
}
}
迭代集合时不应删除元素,请将其更改为类似以下内容(未测试):
Iterator iter=testArrayList.Iterator();
while(iter.hasNext()){
如果(!iter.next().包含(查询)){
iter.remove();
}
Iterator<String> iter = testArrayList.iterator();
while(iter.hasNext()){
if (!iter.next().contains(query)) {
iter.remove();
}