2013-11-20 2 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(); 
} 
관련 문제