1

我正在使用 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);      
}

任何人都知道我做错了什么?

编辑:这是我继承的 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。

4

2 回答 2

4

如果您只想在用户单击下拉列表中的项目时清除文本,请将 AutoComplete 定义为成员变量并覆盖它的 setOnItemClickListener。像这样:

mAutoComplete.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        mAutoComplete.setText("");
    }
});
于 2012-05-04T21:49:19.970 回答
0

如果您使用简单的光标适配器来填充 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 "";
    }
}
于 2012-04-30T22:48:56.300 回答