android-“未选择项目”,同时单击了AutoCompleteTextview项目
作者:互联网
自动完成文本正确列出所有内容都可以正常工作..但是问题是,一旦我单击自动完成项,它就没有选择.
当我单击项目时,Logcat显示“未选择项目”.
Autocomplte.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
// Log.d("your selected item",""+s1.get(position));
System.out.println("sajdksadkasjdksajdksa");
// s1.get(position) is name selected from autocompletetextview
// now you can show the value on textview.
}
});
// ————– Adapter类
public class LoadLocationBasedonCountry extends BaseAdapter implements
Filterable {
private ArrayList<CountryLocation> locList;
private ArrayList<CountryLocation> storedLocList;
private Activity mActivity;
private LayoutInflater inflater;
public LoadLocationBasedonCountry(Activity activity,
ArrayList<CountryLocation> joes) {
this.mActivity = activity;
this.locList = joes;
storedLocList = new ArrayList<CountryLocation>(joes);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
View vi = convertView;
if (vi == null) {
holder = new ViewHolder();
inflater = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi = inflater.inflate(R.layout.row_loc_based_on_country, null,false);
holder.txtCtyName = (TextView) vi.findViewById(R.id.txtCtyName);
vi.setTag(holder);
}
else {
holder = (ViewHolder) vi.getTag();
}
CountryLocation cLoc = locList.get(position);
holder.txtCtyName.setText(cLoc.getLocName() + ", " + cLoc.getCountry());
return vi;
}
@Override
public int getCount() {
return locList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
public static class ViewHolder {
private TextView txtCtyName;
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,FilterResults results) {
locList = (ArrayList<CountryLocation>) results.values;
notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint)
{
FilterResults results = new FilterResults();
ArrayList<CountryLocation> FilteredArrList = new ArrayList<CountryLocation>();
if (constraint == null || constraint.length() == 0) {
results.count = storedLocList.size();
results.values = storedLocList;
} else {
constraint = constraint.toString();
for (int i = 0; i < storedLocList.size(); i++) {
CountryLocation country = storedLocList.get(i);
if (country.getLocName()
.toLowerCase(Locale.getDefault())
.startsWith(constraint.toString())) {
FilteredArrList.add(country);
}
}
results.count = FilteredArrList.size();
results.values = FilteredArrList;
}
return results;
}
};
return filter;
}
public void updateList(ArrayList<CountryLocation> list) {
locList.clear();
locList = list;
notifyDataSetChanged();
}
}
有人遇到过这类问题吗?
解决方法:
终于我找到了解决方案;
由于在autocompleteTextview中,它通过使用方法“ performCompletion”的adapter.getItem(position)获得值—–请参阅android.widget.AutoCompleteTextview
样品:
private void performCompletion(View selectedView, int position, long id) {
if (isPopupShowing()) {
Object selectedItem;
if (position < 0) {
selectedItem = mPopup.getSelectedItem();
} else {
selectedItem = mAdapter.getItem(position); //如果我们从适配器返回null,则此行将为null
}
if (selectedItem == null) {
Log.w(TAG, "performCompletion: no selected item");
return;
}
@Override
public Object getItem(int position) {
return null;
}
所以正确的方法是
@Override
public Object getItem(int position)
{
return locList.get(position).getLocName();
}
标签:autocompletetextview,listview,android 来源: https://codeday.me/bug/20191029/1957262.html