如何在 android 的 autocompletetextview 中获取所选项目的 ID
how to get id of selected item in autocompletetextview in android
我正在从服务器检索自动完成文本视图的值,我正在获取用户名列表及其用户 ID,
现在我想要的是当我 select 列表中的任何用户名时我想获得该用户名的用户 ID。
请看我的代码:
SearchFriendsAdapter.java
public class SearchFriendsAdapter extends ArrayAdapter<String> {
private ArrayList<SearchFriends> items;
public static SearchFriends searchFriends;
public static ArrayList<String> friends_id;
boolean iNetAvailable;
Context context = getContext();
public SearchFriendsAdapter(Activity context, String nameFilter) {
super(context, R.layout.row_search_friend);
items = new ArrayList<SearchFriends>();
}
@Override
public int getCount() {
return items.size();
}
@Override
public String getItem(int index) {
return items.get(index).getFriend_name();
}
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.row_search_friend, null);
}
searchFriends = items.get(position);
if (searchFriends != null) {
TextView tv_friend_name = (TextView) v.findViewById(R.id.search_friend_txt_friend_name);
TextView tv_friend_email = (TextView) v.findViewById(R.id.search_friend_txt_friend_email);
SimpleDraweeView iv_friend_pic = (SimpleDraweeView)v.findViewById(R.id.search_friend_img_friend_pic);
tv_friend_name.setText(searchFriends.getFriend_name());
tv_friend_email.setText(searchFriends.getFriend_email_id());
iv_friend_pic.setImageURI(Uri.parse(searchFriends.getFriend_profile_pic()));
}
return v;
}
@Override
public Filter getFilter() {
Filter myFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
iNetAvailable = Utility.isNetworkAvaliable(context);
SearchFriendsAsyncTask sf = new SearchFriendsAsyncTask();
if (constraint != null) {
List<SearchFriends> new_suggestions = sf.getParseJsonWCF(context, constraint.toString());
items.clear();
items.addAll(new_suggestions);
filterResults.values = items;
filterResults.count = items.size();
}
return filterResults;
}
@Override
protected void publishResults(CharSequence contraint,
FilterResults results) {
if (results != null && results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
};
return myFilter;
}
}
SearchFriendsAsyncTask.java
public class SearchFriendsAsyncTask {
public SearchFriendsAsyncTask() {
super();
}
public List<SearchFriends> getParseJsonWCF(Context mContext, String sName){
List<SearchFriends> ListData = new ArrayList<SearchFriends>();
SearchFriendsModel searchFriendsModel = null;
String webUrl = Constant.URL_SEARCH_FRIEND;
try{
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair(Constant.USER_ID,
Utility.getAppPrefString(mContext ,Constant.USER_ID)));
nameValuePairs
.add(new BasicNameValuePair("name", sName));
String response = Utility.postRequest(webUrl, nameValuePairs);
JSONObject jObject = new JSONObject(response);
Log.v("SEARCH FRIENDS RESPONSE : ", jObject.toString());
searchFriendsModel = (SearchFriendsModel) new Gson().fromJson(
jObject.toString(), SearchFriendsModel.class);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return searchFriendsModel.getFriends();
}
}
SearchModel.java
public class SearchFriends {
String friend_user_id;
String friend_name;
String friend_email_id;
String friend_profile_pic;
public SearchFriends(String friend_user_id, String friend_name,
String friend_email_id, String friend_profile_pic) {
super();
this.friend_user_id = friend_user_id;
this.friend_name = friend_name;
this.friend_email_id = friend_email_id;
this.friend_profile_pic = friend_profile_pic;
}
public String getFriend_user_id() {
return friend_user_id;
}
public void setFriend_user_id(String friend_user_id) {
this.friend_user_id = friend_user_id;
}
public String getFriend_name() {
return friend_name;
}
public void setFriend_name(String friend_name) {
this.friend_name = friend_name;
}
public String getFriend_email_id() {
return friend_email_id;
}
public void setFriend_email_id(String friend_email_id) {
this.friend_email_id = friend_email_id;
}
public String getFriend_profile_pic() {
return friend_profile_pic;
}
public void setFriend_profile_pic(String friend_profile_pic) {
this.friend_profile_pic = friend_profile_pic;
}
}
SearchFriendsModel.java
public class SearchFriendsModel {
private String response;
private String message;
private List<SearchFriends> friends;
public String getResponse() {
return response;
}
public void setResponse(String response) {
this.response = response;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List<SearchFriends> getFriends() {
return friends;
}
public void setFriends(List<SearchFriends> friends) {
this.friends = friends;
}
}
我在这里设置适配器
et_search.setAdapter(new SearchFriendsAdapter(this, et_search.getText().toString()));
et_search.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View arg1, int position,
long arg3) {
// TODO Auto-generated method stub
SearchFriendsAdapter adapter = ((SearchFriendsAdapter)
et_search.getAdapter());
String friend_id = ((SearchFriends)adapter
.getItem(position)).getFriend_user_id();
}
});
当我像上面那样尝试获取 user_id 时,它给了我错误 "Cannot cast from String to SearchFriends"
请帮助我实现我想要的。
提前致谢。
您为 et_search 使用的适配器使用
ArrayList<SearchFriends>
并且您正在尝试获取 friend_id,这是 string 或 int,并且您正在将其转换为 SearchFriends 这是不可能的。
如果你想要 SearchFriends 对象然后像这样使用
SearchFriends object = (SearchFriends)adapter.getItem(position);
抱歉我没有检查你的适配器
这是你在这里返回字符串的错误,所以你无法获得 SearchFriends
@Override
public String getItem(int index) {
return items.get(index).getFriend_name();
}
所以我会说这样做,你就可以开始了。
@Override
public SearchFriends getItem(int index) {
return items.get(index);
}
在适配器中更改此设置
@Override
public SearchFriends getItem(int index) {
return items.get(index);
}
et_search.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View arg1, int position,
long arg3) {
// TODO Auto-generated method stub
SearchFriends freindPOJO= adapter
.getItem(position);
String friends_id = freindPOJO.getFriend_user_id()
}
});
Narendra Kumar 的回答很好。
这是一个 Kotlin 版本示例,对于 ID 为 atvUser
的 AutoCompleteTextView
和基于 User
个对象的 ArrayList
的 ArrayAdapter
:
atvUser.onItemClickListener = AdapterView.OnItemClickListener {
parent, _, position, _ ->
userId = (parent.getItemAtPosition(position) as User).id
}
我指定适配器执行此操作:
atvUser.setAdapter(arrayAdapter(myData.users))
之所以有效,是因为我在 separated file:
中声明了一个扩展函数
fun <T> Context.arrayAdapter(objects: List<T>): ArrayAdapter<T> {
return ArrayAdapter(this, android.R.layout.simple_dropdown_item_1line, objects)
}
希望对您有所帮助。
只需调用您的 adapter.getItem(position) 即可获得您想要的输出。
例如 skillLevelAdapter.getItem(position).getName() 拯救了我一整天。
我正在从服务器检索自动完成文本视图的值,我正在获取用户名列表及其用户 ID, 现在我想要的是当我 select 列表中的任何用户名时我想获得该用户名的用户 ID。
请看我的代码:
SearchFriendsAdapter.java
public class SearchFriendsAdapter extends ArrayAdapter<String> {
private ArrayList<SearchFriends> items;
public static SearchFriends searchFriends;
public static ArrayList<String> friends_id;
boolean iNetAvailable;
Context context = getContext();
public SearchFriendsAdapter(Activity context, String nameFilter) {
super(context, R.layout.row_search_friend);
items = new ArrayList<SearchFriends>();
}
@Override
public int getCount() {
return items.size();
}
@Override
public String getItem(int index) {
return items.get(index).getFriend_name();
}
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.row_search_friend, null);
}
searchFriends = items.get(position);
if (searchFriends != null) {
TextView tv_friend_name = (TextView) v.findViewById(R.id.search_friend_txt_friend_name);
TextView tv_friend_email = (TextView) v.findViewById(R.id.search_friend_txt_friend_email);
SimpleDraweeView iv_friend_pic = (SimpleDraweeView)v.findViewById(R.id.search_friend_img_friend_pic);
tv_friend_name.setText(searchFriends.getFriend_name());
tv_friend_email.setText(searchFriends.getFriend_email_id());
iv_friend_pic.setImageURI(Uri.parse(searchFriends.getFriend_profile_pic()));
}
return v;
}
@Override
public Filter getFilter() {
Filter myFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
iNetAvailable = Utility.isNetworkAvaliable(context);
SearchFriendsAsyncTask sf = new SearchFriendsAsyncTask();
if (constraint != null) {
List<SearchFriends> new_suggestions = sf.getParseJsonWCF(context, constraint.toString());
items.clear();
items.addAll(new_suggestions);
filterResults.values = items;
filterResults.count = items.size();
}
return filterResults;
}
@Override
protected void publishResults(CharSequence contraint,
FilterResults results) {
if (results != null && results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
};
return myFilter;
}
}
SearchFriendsAsyncTask.java
public class SearchFriendsAsyncTask {
public SearchFriendsAsyncTask() {
super();
}
public List<SearchFriends> getParseJsonWCF(Context mContext, String sName){
List<SearchFriends> ListData = new ArrayList<SearchFriends>();
SearchFriendsModel searchFriendsModel = null;
String webUrl = Constant.URL_SEARCH_FRIEND;
try{
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair(Constant.USER_ID,
Utility.getAppPrefString(mContext ,Constant.USER_ID)));
nameValuePairs
.add(new BasicNameValuePair("name", sName));
String response = Utility.postRequest(webUrl, nameValuePairs);
JSONObject jObject = new JSONObject(response);
Log.v("SEARCH FRIENDS RESPONSE : ", jObject.toString());
searchFriendsModel = (SearchFriendsModel) new Gson().fromJson(
jObject.toString(), SearchFriendsModel.class);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return searchFriendsModel.getFriends();
}
}
SearchModel.java
public class SearchFriends {
String friend_user_id;
String friend_name;
String friend_email_id;
String friend_profile_pic;
public SearchFriends(String friend_user_id, String friend_name,
String friend_email_id, String friend_profile_pic) {
super();
this.friend_user_id = friend_user_id;
this.friend_name = friend_name;
this.friend_email_id = friend_email_id;
this.friend_profile_pic = friend_profile_pic;
}
public String getFriend_user_id() {
return friend_user_id;
}
public void setFriend_user_id(String friend_user_id) {
this.friend_user_id = friend_user_id;
}
public String getFriend_name() {
return friend_name;
}
public void setFriend_name(String friend_name) {
this.friend_name = friend_name;
}
public String getFriend_email_id() {
return friend_email_id;
}
public void setFriend_email_id(String friend_email_id) {
this.friend_email_id = friend_email_id;
}
public String getFriend_profile_pic() {
return friend_profile_pic;
}
public void setFriend_profile_pic(String friend_profile_pic) {
this.friend_profile_pic = friend_profile_pic;
}
}
SearchFriendsModel.java
public class SearchFriendsModel {
private String response;
private String message;
private List<SearchFriends> friends;
public String getResponse() {
return response;
}
public void setResponse(String response) {
this.response = response;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List<SearchFriends> getFriends() {
return friends;
}
public void setFriends(List<SearchFriends> friends) {
this.friends = friends;
}
}
我在这里设置适配器
et_search.setAdapter(new SearchFriendsAdapter(this, et_search.getText().toString()));
et_search.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View arg1, int position,
long arg3) {
// TODO Auto-generated method stub
SearchFriendsAdapter adapter = ((SearchFriendsAdapter)
et_search.getAdapter());
String friend_id = ((SearchFriends)adapter
.getItem(position)).getFriend_user_id();
}
});
当我像上面那样尝试获取 user_id 时,它给了我错误 "Cannot cast from String to SearchFriends"
请帮助我实现我想要的。 提前致谢。
您为 et_search 使用的适配器使用
ArrayList<SearchFriends>
并且您正在尝试获取 friend_id,这是 string 或 int,并且您正在将其转换为 SearchFriends 这是不可能的。
如果你想要 SearchFriends 对象然后像这样使用
SearchFriends object = (SearchFriends)adapter.getItem(position);
抱歉我没有检查你的适配器
这是你在这里返回字符串的错误,所以你无法获得 SearchFriends
@Override
public String getItem(int index) {
return items.get(index).getFriend_name();
}
所以我会说这样做,你就可以开始了。
@Override
public SearchFriends getItem(int index) {
return items.get(index);
}
在适配器中更改此设置
@Override
public SearchFriends getItem(int index) {
return items.get(index);
}
et_search.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View arg1, int position,
long arg3) {
// TODO Auto-generated method stub
SearchFriends freindPOJO= adapter
.getItem(position);
String friends_id = freindPOJO.getFriend_user_id()
}
});
Narendra Kumar 的回答很好。
这是一个 Kotlin 版本示例,对于 ID 为 atvUser
的 AutoCompleteTextView
和基于 User
个对象的 ArrayList
的 ArrayAdapter
:
atvUser.onItemClickListener = AdapterView.OnItemClickListener {
parent, _, position, _ ->
userId = (parent.getItemAtPosition(position) as User).id
}
我指定适配器执行此操作:
atvUser.setAdapter(arrayAdapter(myData.users))
之所以有效,是因为我在 separated file:
中声明了一个扩展函数fun <T> Context.arrayAdapter(objects: List<T>): ArrayAdapter<T> {
return ArrayAdapter(this, android.R.layout.simple_dropdown_item_1line, objects)
}
希望对您有所帮助。
只需调用您的 adapter.getItem(position) 即可获得您想要的输出。 例如 skillLevelAdapter.getItem(position).getName() 拯救了我一整天。