android autocompletetextview 自定义,android – 如何为AutoCompleteTextView创建自定义...

以下是我使用ArrayAdapter的工作代码.

我们假设来自Web服务的响应数据如下所示:

[

{

"id": "1",

"name": "Information Technology"

},

{

"id": "2",

"name": "Human Resources"

},

{

"id": "3",

"name": "Marketing and PR"

},

{

"id": "4",

"name": "Research and Developement"

}

]

然后在你的Android客户端:

系类:

public class Department {

public int id;

public String name;

}

自定义适配器类:

public class DepartmentArrayAdapter extends ArrayAdapter {

private final Context mContext;

private final List mDepartments;

private final List mDepartmentsAll;

private final int mLayoutResourceId;

public DepartmentArrayAdapter(Context context, int resource, List departments) {

super(context, resource, departments);

this.mContext = context;

this.mLayoutResourceId = resource;

this.mDepartments = new ArrayList<>(departments);

this.mDepartmentsAll = new ArrayList<>(departments);

}

public int getCount() {

return mDepartments.size();

}

public Department getItem(int position) {

return mDepartments.get(position);

}

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

try {

if (convertView == null) {

LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();

convertView = inflater.inflate(mLayoutResourceId, parent, false);

}

Department department = getItem(position);

TextView name = (TextView) convertView.findViewById(R.id.textView);

name.setText(department.name);

} catch (Exception e) {

e.printStackTrace();

}

return convertView;

}

@Override

public Filter getFilter() {

return new Filter() {

@Override

public String convertResultToString(Object resultValue) {

return ((Department) resultValue).name;

}

@Override

protected FilterResults performFiltering(CharSequence constraint) {

FilterResults filterResults = new FilterResults();

List departmentsSuggestion = new ArrayList<>();

if (constraint != null) {

for (Department department : mDepartmentsAll) {

if (department.name.toLowerCase().startsWith(constraint.toString().toLowerCase())) {

departmentsSuggestion.add(department);

}

}

filterResults.values = departmentsSuggestion;

filterResults.count = departmentsSuggestion.size();

}

return filterResults;

}

@Override

protected void publishResults(CharSequence constraint, FilterResults results) {

mDepartments.clear();

if (results != null && results.count > 0) {

// avoids unchecked cast warning when using mDepartments.addAll((ArrayList) results.values);

for (Object object : (List>) results.values) {

if (object instanceof Department) {

mDepartments.add((Department) object);

}

}

notifyDataSetChanged();

} else if (constraint == null) {

// no filter, add entire original list back in

mDepartments.addAll(mDepartmentsAll);

notifyDataSetInvalidated();

}

}

};

}

}

主要活动:

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mAutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView);

mAutoCompleteTextView.setThreshold(1);

new DepartmentRequest().execute();

}

private class DepartmentRequest extends AsyncTask {

@Override

protected JSONArray doInBackground(Void... voids) {

OkHttpJsonArrayRequest request = new OkHttpJsonArrayRequest();

try {

return request.get("http://...");

} catch (IOException | JSONException e) {

e.printStackTrace();

}

return null;

}

@Override

protected void onPostExecute(JSONArray jsonArray) {

super.onPostExecute(jsonArray);

if (jsonArray != null && jsonArray.length() > 0) {

Gson gson = new Gson();

Department[] departments = gson.fromJson(jsonArray.toString(), Department[].class);

mDepartmentList = Arrays.asList(departments);

mDepartmentArrayAdapter = new DepartmentArrayAdapter(mContext, R.layout.simple_text_view, mDepartmentList);

mAutoCompleteTextView.setAdapter(mDepartmentArrayAdapter);

}

}

}

private class OkHttpJsonArrayRequest {

OkHttpClient client = new OkHttpClient();

// HTTP GET REQUEST

JSONArray get(String url) throws IOException, JSONException {

Request request = new Request.Builder()

.url(url)

.build();

Response response = client.newCall(request).execute();

return new JSONArray(response.body().string());

}

}

这是截图:

SLo0x.png

希望这可以帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值