我使用以下代码为AutoCompleteTextView设置适配器(SimpleCursorAdapter)
mComment = (AutoCompleteTextView) findViewById(R.id.comment); Cursor cComments = myAdapter.getDistinctComments(); scaComments = new SimpleCursorAdapter(this,R.layout.auto_complete_item,cComments,new String[] {DBAdapter.KEY_LOG_COMMENT},new int[]{R.id.text1}); mComment.setAdapter(scaComments);
auto_complete_item.xml
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
而thi是实际控件的xml
<AutoCompleteTextView android:id="@+id/comment" android:hint="@string/COMMENT" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="18dp"/>
下拉列表似乎正常工作,并显示一个项目列表.当我从列表中进行选择时,在textview中得到一个sqlite对象(‘android.database.sqlite.sqliteCursor @’…).
任何人知道会导致什么,还是如何解决这个问题?
谢谢
好的,我可以挂钩OnItemClick事件,但AutoCompleteTextView小部件的TextView.setText()部分在此之后被更新. OnItemSelected()事件永远不会触发,并且在首次显示下拉项目时触发onNothingSelected()事件.
mComment.setOnItemClickListener( new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0,View arg1,int arg2,long arg3) { // TODO Auto-generated method stub SimpleCursorAdapter sca = (SimpleCursorAdapter) arg0.getAdapter(); String str = getSpinnerSelectedValue(sca,arg2,"comment"); TextView txt = (TextView) arg1; txt.setText(str); Toast.makeText(ctx,"onItemClick",Toast.LENGTH_SHORT).show(); } }); mComment.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0,long arg3) { Toast.makeText(ctx,"onItemSelected",Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub Toast.makeText(ctx,"onNothingSelected",Toast.LENGTH_SHORT).show(); } });
任何人有什么想法如何覆盖TextView的更新?
谢谢
帕特里克
解决方法
我不认为你应该更新AutoCompleteTextView的文本.它应该自动执行.它通过调用[CursorAdapter.convertToString(…)] [1]方法来实现.如果你阅读了它指出的方法的描述.因此,如果您正在编写自己的CursorAdapter,您将覆盖该方法,以返回您希望在建议列表中显示的任何文本.这个人做的很好,解释如何做到这一点:
线86 – http://thinkandroid.wordpress.com/2010/02/08/writing-your-own-autocompletetextview/
线86 – http://thinkandroid.wordpress.com/2010/02/08/writing-your-own-autocompletetextview/
但是,由于您使用的是SimpleCursorAdapter,因此您无法覆盖此方法.相反,您需要实现/创建一个[SimpleCursorAdapter.CursorToStringConverter] [2]并将其传递到[SimpleCursorAdapter.setCursorToStringConverter(…)] [3]中:
SimpleCursorAdapter adapter = new SimpleCursorAdapter(context,layout,cursor,from,to); CursorToStringConverter converter = new CursorToStringConverter() { @Override public CharSequence convertToString(Cursor cursor) { int desiredColumn = 1; return cursor.getString(desiredColumn); } }; adapter.setCursorToStringConverter(converter);
或者如果您不想创建一个CursorToStringConverter,那么使用[SimpleCursorAdapter]. setStringConversionColumn(…)] [4]方法.但是我认为您仍然必须将CursorToStringConverter显式设置为null:
int desiredColumn = 1; adapter.setCursorToStringConverter(null); adapter.setStringConversionColumn(desiredColumn);
对不起,垃圾邮件拦截器不会让我发布链接到Android文档,描述我上面发布的链接.但是,快速的Google搜索将指向正确的文档页面.