【问题标题】:how to get id of selected item in autocompletetextview in android如何在android的autocompletetextview中获取所选项目的ID
【发布时间】:2016-01-10 17:17:46
【问题描述】:

我正在从服务器检索 autocompletetextview 的值,我正在获取用户名列表及其用户 ID, 现在我想要的是当我从列表中选择任何用户名时,我想获取该用户名的用户 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 时,它给了我错误“无法从字符串转换为 SearchFriends”

请帮助我实现我想要的。 提前致谢。

【问题讨论】:

  • 请问,为什么问题被否决了?至少留下评论问题有什么问题,以便人们可以学习它并且将来不会重复它。
  • 我从这些太多的反对意见中了解到,只分享相关的代码,这代码太多了
  • 你提到的错误你能给出出现这个错误的行
  • @SyedNazarMuhammad :我只是想确保如果有人在提供帮助,那么他可能想要检查完整代码,这就是我发布完整代码的原因。这些人并没有帮助,而是对这个问题投了反对票,所以其他人也不会提供帮助。
  • @SyedNazarMuhammad :错误在 et_search.setOnItemClickListener 中

标签: android autocompletetextview


【解决方案1】:

只需调用您的 adapter.getItem(position) 即可获得所需的输出。 例如 SkillLevelAdapter.getItem(position).getName() 节省了我一整天的时间。

【讨论】:

    【解决方案2】:

    Narendra Kumar 的回答很好。

    这是一个 Kotlin 版本的示例,对于 ID 为 atvUserAutoCompleteTextView 和基于 ArrayListUser 对象的 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)
    }
    

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      在适配器中更改它

      @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()
      
              }
          });
      

      【讨论】:

      • 我搞定了,谢谢你的帮助:) 如果你认为这个问题对其他人有用,请投票。
      • 它给出的列表的位置,所以位置与原始数据不匹配。真正的解决方案在这里:spapas.github.io/2019/04/05/android-custom-filter-adapter。您需要公开 FilterResult 值。
      【解决方案4】:

      您用于 et_search 的适配器使用 ArrayList&lt;SearchFriends&gt;

      并且您正在尝试获取 friend_id,它是 string 或 int,而您正在将其投射到 SearchFriends,这是不可能的。 p>

      如果你想要 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);    
      }
      

      【讨论】:

      • 它给出了相同的错误“无法从字符串转换为 SearchFriends”
      • 我试过了,它给出了错误“返回类型与 ArrayAdapter.getItem(int) 不兼容”
      • 请使用以下链接了解如何使用 ArrayAdapter 或制作自定义适配器。 link
      • 嘿,我得到了 id,但出现了一个新问题,当我选择任何名称时,它会将值设置为“com.example.imp.models.SearchFriends@41fffa58”
      • 得到它的工作,谢谢你的帮助:) 如果你认为这个问题对其他人有用,请投票。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-20
      • 1970-01-01
      相关资源
      最近更新 更多