2011-09-30 37 views
1

我想为EditText启用搜索功能。我的要求是这样的: 当某人键入某个字母时,假设用户键入'a',那么它应该显示所有以'a'开头的单词应该显示为下拉列表。例如,如果我第一次在EditText中输入“copy”,如果再次输入EditText并尝试输入“co”,那么它应该显示下拉列表“copy”,“come”,“cow”。 ... 我想启用此功能到我的EditText视图。它工作时,我有一个ListView里面只有一个textview,但现在我有两个textview在我的ListView它不起作用。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 answer's.Autocompletetextview最适合您的情况。 – Dharmendra

+0

你想为你的清单过滤吗?或下拉建议列表?如果你想要一个建议列表从edittext中下拉,那么你需要使用'AutoCompleteTextView'。这里有一个基本的代码片段 - > http://developer.android.com/reference/android/widget/AutoCompleteTextView.html – Ronnie

+0

我想为我的列表过滤器。例如,如果我在我的ListView上写了“Am”,将只有以“Am”(美国,美国,Amo,Amico ...)开头的单词,然后我可以从ListView中选择一个项目。我不想下拉建议列表,这就是为什么我使用EditText。我的代码工作时,只有一个最后的字符串,现在我有两个,并不起作用。有没有解决方法?一个例子或一些代码?谢谢。 – Valerio

回答

5

我认为AutoCompleteTextView可能更适合实现此功能。

+0

我已经添加了AutoCompleteTextView而不是EditText,但它不起作用。 – Valerio

+0

@Valerio它不会开箱即用,你必须编写代码来支持它,像[this]这样的教程(http://thinkandroid.wordpress.com/2010/02/08/writing-yourown -autocompletetextview /)可能会有所帮助。 –

+0

我是否在ListViewAdapter中更改某些内容,或者需要为EditText创建一个适配器? – Valerio

0

而不是延伸BaseAdapter您扩展ArrayAdapter。它为您实现了Filterable界面。在TextWatcher调用getFilter().filter(text);方法。

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

它不起作用。我不知道为什么,但它不起作用。 – Valerio