我使用AutoCompleteTextView显示用户可以选择的项目列表。当用户选择一个项目时,此选定项目将填充AutoCompleteTextView正下方的ListView。到目前为止一切都很好。
问题:从AutoCompleteTextView中选择项目后,AutoCompleteTextView正文本身(这个“文本框”)被一些文本填满,这是SimpleCursorAdapter资源(显示的实际文本是:android .widget.SimpleCursorAdapter @ 4107d010)。
我希望拥有:我希望AutoCompleteTextView刷新并在其自己的正文中不显示任何文本,以便用户可以立即输入更多文本并从下拉列表中选择更多项目。
你能否告诉我如何实现这一目标?
添加信息:
谢谢凯尔。我所做的是将SimpleCursorAdapter扩展为SimpleCursorAdapterNoText。然后我就像你说的那样覆盖了convertToString()。我没有更改BindView,因为我读了两次文档,但我仍然不明白我应该在BindView中改变什么。任何方式 - 这没有保存问题 - 我仍然在自动完成中获得相同的字符串。这是我的代码:
@SuppressWarnings("deprecation")
private void populateListView()
{
// Get all of the notes from the database and create the item list
Cursor tournamentXCursor = mDbHelper.retrieveTrounamentX(mRowId);
startManagingCursor(tournamentXCursor);
// Create an array to specify the fields we want to display in the list (only name)
String[] from = new String[] {StournamentConstants.TblX.TBL_COLUMN_X_NAME};
// and an array of the fields we want to bind those fields to (in this case just name)
int[] to = new int[]{R.id.competitor_row};
// Now create an array adapter and set it to display using our row
SimpleCursorAdapterNoText tournamentX = new SimpleCursorAdapterNoText(this, R.layout.competitor_row, tournamentXCursor, from, to);
tournamentX.convertToString(tournamentXCursor);
setListAdapter(tournamentX);
}
任何人都知道我做错了什么?
EDITED: 这是我继承的SimpleCursorAdapter类
public class SimpleCursorAdapterNoText extends SimpleCursorAdapter
{
public SimpleCursorAdapterNoText(Context context, int layout, Cursor c,
String[] from, int[] to)
{
super(context, layout, c, from, to);
// TODO Auto-generated constructor stub
}
@Override
public CharSequence convertToString(Cursor cursor)
{
//Empty string so AutoComplete shows no text
return "";
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
// TODO Auto-generated method stub
super.bindView(view, context, cursor);
}
}
我更改了我的调用代码并取消了
tournamentX.convertToString(tournamentXCursor);
我确信我不仅要在我的子类中覆盖它,而且还要在我的调用代码中使用它,以便消除AutoComplete中的文本。
我下垂说这仍然没有帮助 - 我在AutoComplete选择列表中选择一个项目之后,继续在AutoCompleteBox中获取android.database.sqlite.SQLiteCursor@41377578。
谢谢D。
答案 0 :(得分:4)
如果您只是想在用户点击下拉列表中的项目时清除文本,请将AutoComplete定义为成员变量并覆盖它的setOnItemClickListener。像这样:
mAutoComplete.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mAutoComplete.setText("");
}
});
答案 1 :(得分:0)
如果您使用simplecursoradapter来填充textView,则需要对其进行子类化并覆盖以下方法。您可能还必须覆盖bindview。
@Override
public CharSequence convertToString (Cursor cursor){
return "";
}
您需要将上述内容放在SimpleCursorAdapterNoText类中,而不是从顶级代码中调用它。
class extends SimpeCursorAdpaterNotText{
// ... whatever other code you have here
@Override
public CharSequence convertToString (Cursor cursor){
return "";
}
}