Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android搜索字符串数组_Java_Android_Search - Fatal编程技术网

Java Android搜索字符串数组

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

我目前正在尝试搜索数组列表,并显示与用户查询匹配的结果。我不断收到ConcurrentModificationException,不知道如何修复它。我的可搜索活动中的代码如下:

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