阻止AutoCompleteTextView在自己的框中显示结果

时间:2012-04-30 20:50:16

标签: android autocompletetextview

我使用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。

2 个答案:

答案 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 "";
    }
}