2012-07-14 38 views
0

我使AutoCompleteTextView与默认下拉菜单一起工作。我现在试图弄清楚是否可以使用自定义下拉菜单来处理我的数据。我感觉非常接近,但我无法下拉显示。 这是我想要做的。Android AutoCompleteTextView自定义从网上下载数据

我创建了一个自定义适配器。

public class UserSearchAdapter extends ArrayAdapter<UserSearchItem> { 

private Context context; 
private LayoutInflater vi; 
int count = 0; 

public UserSearchAdapter(Context context) { 
    super(context, 0, items); 
    this.context = context; 
    vi = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 

    final UserSearchItem i = items.get(position); 
    if (i != null) { 
     Log.d("adapter", "in here"); 
     UserSearchItem si = (UserSearchItem) i; 
     v = vi.inflate(R.layout.user_search_item, null); 
     final TextView title = (TextView) v 
       .findViewById(R.id.tv_userSearchName); 
     if (title != null) 
      title.setText(si.userName); 
    } 

    return v; 
} 

}

这里是我的UserSearchItem类

public class UserSearchItem { 

public final String userName; 
public final String userId; 
public final String userFBId; 

public UserSearchItem(String userName, String userId, String userFBId) { 
    this.userName = userName; 
    this.userId = userId; 
    this.userFBId = userFBId; 
} 

} 

这里就是我实现AutoCompleteTextView

userSearch = (AutoCompleteTextView)findViewById(R.id.tv_UserSearch); 
    AutoCompleteAdapter = new UserSearchAdapter(this); 
    userSearch.setAdapter(AutoCompleteAdapter); 
    userSearch.addTextChangedListener(this); 

    @Override 
public void afterTextChanged(Editable s) { 
    if (shouldAutoComplete) { 
     new DoAutoCompleteSearch().execute(s.toString()); 
    } 
} 

@Override 
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
     int arg3) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) { 
    shouldAutoComplete = true; 
    for (int position = 0; position < AutoCompleteAdapter.getCount(); position++) { 
     if (AutoCompleteAdapter.getItem(position).userName.equalsIgnoreCase(s.toString())) { 
      shouldAutoComplete = false; 
      break; 
     } 
    } 

} 

private class DoAutoCompleteSearch extends AsyncTask<String, Void, ArrayList<UserSearchItem>> { 


    @Override 
    protected ArrayList<UserSearchItem> doInBackground(String... params) { 
     ArrayList<UserSearchItem> autoComplete = new ArrayList<UserSearchItem>(); 

     //get info from DB (userName, userId, userFbId) 

        UserSearchItem item = new UserSearchItem(userName, userId, userFbId); 
        autoComplete.add(item); 
       } 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return autoComplete; 
    } 

    @Override 
    protected void onPostExecute(ArrayList<UserSearchItem> result) { 
     AutoCompleteAdapter.clear(); 
     for (UserSearchItem s : result) 
     { 
      AutoCompleteAdapter.add(s); 
     } 
    } 
} 

有什么建议?

回答

0

如果你还在寻找一个答案:在构造函数中的数据填充适配器:

UserSearchAdapter adapter = new UserSearchAdapter(this, data); 

而在你的适配器类添加一个构造函数是这样的:

public class UserSearchAdapter extends ArrayAdapter<UserSearchItem> { 

    private Context context; 
    private LayoutInflater vi; 
    int count = 0; 
    private List<UserSearchItem> mItems; 

    public UserSearchAdapter(Context context) { 
     super(context, 0, items); 
     this.context = context; 
     vi = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    } 

    public UserSearchAdapter(Context context, List<UserSearchItem> items) { 
     super(context, 0, items); 
     this.context = context; 
     vi = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     mItems = items; 

    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     final UserSearchItem i = mItems.get(position); 
     if (i != null) { 
      Log.d("adapter", "in here"); 
      UserSearchItem si = (UserSearchItem) i; 
      v = vi.inflate(R.layout.user_search_item, null); 
      final TextView title = (TextView) v 
       .findViewById(R.id.tv_userSearchName); 
     if (title != null) 
      title.setText(si.userName); 
    } 

    return v; 
    } 
相关问题