2011-09-30 4 views
1

EditText에 검색 기능을 사용하고 싶습니다. 내 요구 조건은 다음과 같습니다. 누군가가 문자를 입력하면 사용자가 'a'를 입력하면 'a'로 시작하는 모든 단어가 드롭 다운 목록으로 표시되어야합니다. 예를 들어 EditText에 "copy"를 처음 입력 한 경우 EditText를 지우고 "co"를 입력하려고하면 "copy", "come", "cow"드롭 다운 목록이 표시됩니다. ... 내 EditText보기에이 기능을 사용 가능하게하고 싶습니다. 그것은 내부에있는 textview 함께 ListView 있었을 때 작동하지만 지금은 내 ListView 두 textview 작동하지 않습니다. Android - EditText가 검색 상자로 작동하지 않습니다.

내 활동 :

public class sedactivity extends Activity { 


ListView lview; 
ListViewAdapter lviewAdapter; 
EditText ed; 

private static final String first[] = { 
    "America", 
    "Busta", 
    "Cactus", 
    "Fire", 
    "Garden", 
    "Hollywood", 
    "King",}; 

private static final String second[] = { 
    "Uniti", 
    "Chiusa", 
    "Verde", 
    "Fiamme", 
    "Aperto", 
    "Boulevard", 
    "Kong",}; 

private ArrayList<String> arr_sort= new ArrayList<String>(); 
int textlength=0; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ed = (EditText)findViewById(R.id.EditText1); 
    lview = (ListView) findViewById(R.id.listView2); 
    lviewAdapter = new ListViewAdapter(this, first, second); 


    System.out.println("adapter => "+lviewAdapter.getCount()); 

    lview.setAdapter(lviewAdapter); 

    lview.setTextFilterEnabled(true); 



    ed.addTextChangedListener(new TextWatcher() { 



    public void afterTextChanged(Editable s) { 
    } 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
    } 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
      textlength=ed.getText().length(); 
      arr_sort.clear(); 
      for(int i=0;i<first.length;i++) 
      { 
      if(textlength<=first[i].length()) 
      { 
      if(ed.getText().toString().equalsIgnoreCase((String) first[i].subSequence(0, textlength))) 
      { 
      arr_sort.add(first[i]); 
      } 
      } 
      } 

     }});} 

}

그리고 이것은 내 ListView에 어댑터

public class ListViewAdapter extends BaseAdapter{ 
Activity context; 
String title[]; 
String description[]; 

public ListViewAdapter(Activity context, String[] title, String[] description) { 
    super(); 
    this.context = context; 
    this.title = title; 
    this.description = description; 
} 

public int getCount() { 
    // TODO Auto-generated method stub 
    return title.length; 
} 

public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return null; 
} 

public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

private class ViewHolder { 
    TextView txtViewTitle; 
    TextView txtViewDescription; 
} 

public View getView(int position, View convertView, ViewGroup parent) 
{ 
    // TODO Auto-generated method stub 
    ViewHolder holder; 
    LayoutInflater inflater = context.getLayoutInflater(); 

    if (convertView == null) 
    { 
     convertView = inflater.inflate(R.layout.listitem_row, null); 
     holder = new ViewHolder(); 
     holder.txtViewTitle = (TextView) convertView.findViewById(R.id.textView1); 
     holder.txtViewDescription = (TextView) convertView.findViewById(R.id.textView2); 
     convertView.setTag(holder); 
    } 
    else 
    { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.txtViewTitle.setText(title[position]); 
    holder.txtViewDescription.setText(description[position]); 

return convertView; 
} 

}

+1

Mahmoud Hossam을 따라야합니다. 답변 .Autocompletetextview가 귀하의 사례에 가장 적합합니다. – Dharmendra

+0

목록에 필터를 원하십니까? 또는 드롭 다운 제안 목록? edittext에서 추천 목록을 드롭하려면 'AutoCompleteTextView'를 사용해야합니다. 기본 코드 스 니펫은 여기에 있습니다 -> http://developer.android.com/reference/android/widget/AutoCompleteTextView.html – Ronnie

+0

내 목록에 대한 필터를 원합니다. 예를 들어, "ListView"에 "Am"을 쓴다면 "Am"(America, American, Amo, Amico ...)으로 시작하는 단어 만 표시되고 ListView에서 하나의 항목을 선택할 수 있습니다. 제안 목록을 드롭 다운하지 않기 때문에 EditText를 사용했습니다. 마지막 문자열이 하나 밖에 없을 때 코드가 작동했습니다. 이제 두 개가 작동하고 작동하지 않습니다. 어떤 해결책이 있습니까? 예 또는 일부 코드? 고맙습니다. – Valerio

답변

5

이 기능을 구현하려면 AutoCompleteTextView이 더 적합하다고 생각합니다.

+0

EditText 대신 AutoCompleteTextView를 추가했지만 여전히 작동하지 않습니다. – Valerio

+0

@Valerio 상자에서 작동하지 않습니다, 당신은 그것을 지원하는 코드를 작성해야합니다 [이] (http://thinkandroid.wordpress.com/2010/02/08/writing-your-own -autocompletetextview /)가 도움이 될 수 있습니다. –

+0

ListViewAdapter에서 뭔가를 변경하거나 EditText 용 어댑터를 만들어야합니까? – Valerio

0

BaseAdapter을 확장하는 대신 ArrayAdapter을 확장하십시오. 그것은 당신을 위해 Filterable 인터페이스를 구현합니다. TextWatchergetFilter().filter(text); 방법으로 전화하십시오.

public void afterTextChanged(Editable s) { 
    listview.getAdapter().getFilter().filter(s); 
} 
+0

작동하지 않습니다. 왜 그런지는 모르겠지만 작동하지 않습니다. – Valerio

관련 문제