gpt4 book ai didi

android - AutoCompleteTextView 在选择后显示 'android.database.sqlite.SQLiteCursor@' ...

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:07 25 4
gpt4 key购买 nike

我正在使用以下代码为 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, View arg1,
int arg2, 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/

但是,由于您使用的是 SimpleCursorAdapter,因此无法覆盖此方法。相反,您需要实现/创建一个 [SimpleCursorAdapter.CursorToStringConverter][2] 并将其传递给 [Si​​mpleCursorAdapter.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 文档的链接。但是快速的谷歌搜索会让您指向正确的文档页面。

关于android - AutoCompleteTextView 在选择后显示 'android.database.sqlite.SQLiteCursor@' ...,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2159674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com