2014-10-06 66 views
3

自动完成文本正确列出一切工作正常..但问题是一旦我点击自动完成项目,它不选择。“没有选定的项目”虽然AutoCompleteTextview项目点击

当我点击物品时,Logcat显示“No Selected Item”。

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. 
     } 
    }); 

// --------------适配器类

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

}

是否有人在这些类型的问题来了?

+0

没明白这里的一切......是什么你的适配器类?你的父级布局/主视图的其他元素上是否还有其他Listener? – mithrop 2014-10-06 12:19:18

+0

我使用autocompletetextview来显示基于国家的位置。基于搜索字符串,它正在从服务器加载正确的值。但问题是,当我选择一个项目时,它没有做任何事......并且logcat显示为“没有选定的项目“ – 2014-10-06 12:22:09

+0

好的。什么是你设置OnItemClickListener的'Autocomplte'实例? – mithrop 2014-10-06 12:24:16

回答

4

最后我得到了解决方案;

由于autocompleteTextview,它使用adapter.getItem(位置),使用方法 “performCompletion” -----得到值指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

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

非常感谢!我想知道为什么onItemClickListener根本没有被调用。 'getItem()'必须用非空结果实现! – yuku 2015-10-28 16:07:54

相关问题