2012-04-23 12 views
0

문자열 배열을 검색하여 결과를 ListView로 가져 오려고합니다. 내가문자열 배열을 통한 Android 검색 및 결과 얻기 ListView에

<string-array name="Colors"> 
    <item>Red</item> 
    <item>Yellow</item> 
    <item>Blue</item> 
    <item>DarkRed</item> 
</string> 

이 나는 ​​"레드"를 검색하면

그래서, 내가 ListView에 두 항목으로 받아야합니다. 각 항목에 대해 ListView에 표시 될 문자열 배열과 문자열 값에 ID를 알고 싶습니다.

결과를 검색하는 동안 모두 완료되면 사라지는 ProgressBar (불확정 상태)를 표시하려고합니다.

문자열 배열을 List 또는 String []에 가져온 다음 배열의 각 항목을 비교하고 검색 텍스트와 일치하는 ListView를 놓는 새 스레드를 만듭니다.

가장 좋은 방법은 무엇인지 모르겠습니다.

public class SearchActivity extends Activity { 
    private ProgressBar mProgress; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.search); 

     mProgress = (ProgressBar) findViewById(R.id.Progress); 

     new Thread(new Runnable() { 
      public void run() { 
      int item_pos = 0; 
      int item_count = 0; 

      String[] Colors = getResources().getStringArray(R.array.Colors); 
       item_count = Colors.length(); 

       mProgress.setVisibility(View.VISIBLE); 

       while (item_pos < item_count) { 
        // Compare with the search text 
        // Add it to the ListView (I don't know how) 
        item_pos +=1; 
       } 
       mProgress.setVisibility(View.GONE); 
      } 
     }).start(); 
    } 
} 

그래서, 내 질문 :

  1. 가 어떻게 다음 검색 텍스트와 각 텍스트 값을 비교 항목 ID 및 문자열을 모두받을 수 있나요 내 코드는 다음과 같은 것입니다?
  2. ListView에 항목을 추가하려면 어떻게합니까?
  3. ProgressBar가 보이지 않는 이유는 무엇입니까? ProgressBar 구성 XML 코드는 이것이다 : 제안의 모든 도움을

    <ProgressBar 
        android:id="@+id/Progress" 
        style="@android:style/Widget.ProgressBar.Small" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:indeterminate="true" 
        android:visibility="visible" /> 
    

감사합니다!

답변

3

다음은이 문제를 해결하는 방법입니다.

첫째, 얻을 것 내 string-array 같은 :

목록에서 원하는 시퀀스
Resources res = getResources(); 
    String[] colors = res.getStringArray(R.array.Colors); 
    // transform into ArrayList for ease of use 
    ArrayList<String> colorsList = Arrays.asList(colors); 

검색 및 제거 원치 않는 요소 :

for (String s : colorsList) { 
    if (!s.contains("red")) { // hardcoded, only to illustrate my logic 
     colorsList.remove(s); 
    } 
} 
이제

무료 목록을 가지고 원하지 않는 요소가 있으면 ListView에 간단히 바인딩하십시오. ArrayAdapter을 권하고 싶습니다. 문서에는 basic ListView usage에 관한 훌륭한 기사가 포함되어 있습니다.

Activity에만 ListView가 포함되어 있기 때문에 Activity 대신 Activity를 ListActivity에서 확장 할 수 있습니다. ListView를 쉽게 얻기 위해 getListView()을 호출하는 것과 같은 몇 가지 새로운 이점을 제공합니다.

ProgressBar가 실행되는 한 AsyncTask 클래스를 살펴보면 응용 프로그램에서 스레딩을보다 세련되게 처리 할 수 ​​있습니다. Android Dev Team은 현재 사용중인 고전적인 Runnable 접근 방식보다 AsyncTask를 사용하도록 권장합니다.

마지막으로 ListView와 관련된 코드 스 니펫을 좀 더 찾고 싶다면 here을 보셔야합니다. 안드로이드 팀의 예제로 가득합니다.안드로이드를 시작했을 때 정말 도움이되었고 ListViews에서 머리를 쓸 수 없었습니다.

희망이 도움이됩니다.

+0

도움 주셔서 감사합니다. Async 클래스 안에서이 작업을 수행 할 것이므로 두 가지 이점을 얻게 될 것이라고 생각합니다. 시간 내 주셔서 다시 한 번 감사드립니다! – ali