为了账号安全,请及时绑定邮箱和手机立即绑定

由CursorLoader支持的AutoCompleteTextView

由CursorLoader支持的AutoCompleteTextView

狐的传说 2019-08-05 14:19:52
由CursorLoader支持的AutoCompleteTextView因此,我无法在使用自定义的同时扩展MultiAutoCompleteTextView和支持它。这个问题特别随着电话而上升。在其中有一个游标作为参数方法具有在第一调用此方法有效的和未封闭的光标。但是,后续调用会导致空游标或关闭游标。我猜这与管理如何有关。CursorLoaderTokenizermAdapter.setCursorToStringConverter();convertToString()LoaderManagerCursorLoader如果我将setCursorToStringConverter()方法注释掉,那么我会根据我在此视图中输入的文本看到可用选项列表。但是,由于没有convertToString()实现terminateToken()方法,因此自定义方法Tokenizer不接收我想要的字符串,而是接收游标对象的代表字符串,因为游标尚未用于获取当前字符串值在结果查询中的所需列的。任何人都已经能够实现三类的组合(CursorLoader/LoaderManger,MultiAutoCompleteTextView,和Tokenizer)?我是否朝着正确的方向前进,或者这根本不可能?我已经能够实现一个自定义MultiAutoCompleteTextView支持SimpleCursorAdapter的自定义Tokenizer。我只是想知道是否有可能使用a来实现它CursorLoader,因为严格模式抱怨光标MultiAutoCompleteTextView没有被明确关闭。任何帮助将不胜感激。
查看完整描述

3 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

基本上,机器人自动完成textview不是很强大,当我必须处理更大量的数据时,我所做的是,我保持文本更改监听编辑文本以进行搜索,然后每当编辑文本上的某些内容发生变化时,它查询数据库。

如果这可能对某人有帮助,可以在onCreate上放置一个edittext

EditText etSearch = (EditText)findViewById(R.id.etSearchBox);etSearch.addTextChangedListener(filterTextWatcher);//The filterTextWatcher is private TextWatcher filterTextWatcher = new TextWatcher() {
     @Override
    public void afterTextChanged(Editable s) {
    }
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,int after) {
    }
    @Override
    public void onTextChanged(CharSequence s, int start, int before,int count) {
        adapter.getFilter().filter(s.toString());
        }
    };

因此,在您的适配器中,您需要创建一个getFilter()方法...

@Override
    public Filter getFilter() {
    if (nameFilter == null) {
        nameFilter = new NameFilter();
    }
    return nameFilter;}
    private class NameFilter extends Filter {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
    FilterResults results = new FilterResults();
    Cursor cursor = null;
    // get your cursor by passing appropriate query here
    results.values = cursor;
    results.count = cursor.getCount();
    return results;
    }
    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
    notifyDataSetChanged();
        }
    }


查看完整回答
反对 回复 2019-08-05
?
慕的地10843

TA贡献1785条经验 获得超8个赞

调用setStringConversionColumn()方法而不是setCursorToStringConverter()@Olaf建议。我已经设置了这个,onLoadFinished()因为这是唯一Cursor可用的,因为这是实现a LoaderManger

public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    // Swap the new cursor in. (The framework will take care of closing
    // the old cursor once we return.)
    Log.d(DEBUG_TAG, "onLoadFinished()");   
    mAdapter.setStringConversionColumn(data.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 
    mAdapter.swapCursor(data);}

这适用于选择一个项目MultiAutoCompleteTextView,但不允许在中选择多个项目MultiAutoCompleteTextView

我猜这个onTextChanged()方法存在一些问题,因为它调用了restartLoader()。这适用于此视图中的第一个条目,但不适用于后续条目。我现在不太确定什么是错的。


查看完整回答
反对 回复 2019-08-05

没有找到匹配的内容?试试慕课网站内搜索吧

  • 3 回答
  • 0 关注
  • 351 浏览

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号