类别:.Net相关知识 / 日期:2014-11-06 / 浏览:3047 / 评论:0

1、提出问题 在使用AutoCompleteTextView实现自动匹配的时候,通常情况下都是从起始位置开始匹配,但这并不是我们需要,一般情况下,我们都需要从任意的位置进行模糊匹配。如果不使用Mono开发的话从网上可以找到诸如修改源代码等比较容易的方法去解决,现在使用Mono的情况下,经过我的摸索,和大家分享我自己的办法。 2、解决问题 首先我要显示的数据存储在本地的Sqlite中,接下来我们创建一个自己的Adapter类,这个类需要继承自CursorAdapter,代码如下。  

public class PigArrayAdapter : CursorAdapter
{
    private int columnIndex;

    public PigArrayAdapter(Context context, ICursor c, int columnIndex)
        : base(context, c)
    {
        this.columnIndex = columnIndex;
    }

    public override void BindView(View view, Context context, ICursor cursor)
    {
        ((TextView)view).SetText(cursor.GetString(columnIndex), TextView.BufferType.Normal);
    }

    public override View NewView(Context context, ICursor cursor, ViewGroup parent)
    {
        LayoutInflater inflater = LayoutInflater.From(context);
		TextView view = (TextView) inflater.Inflate(Resource.Layout.spinner_layout, parent, false);
		return view;
    }

    public override ICharSequence ConvertToStringFormatted(ICursor cursor)
    {
        var value= cursor.GetString(columnIndex);
        return new Java.Lang.String(value);
    }

    public override ICursor RunQueryOnBackgroundThread(ICharSequence constraint)
    {
        if (constraint != null) {
            string selection = "pigsnumber like '%" + constraint.ToString() + "%'";
            return SQLiteHelper.GetDatabase().Query("PigInfo", new[] { "pigsnumber", "pigsarchivesid as _id" }, selection, null, null, null, null);
		} else {
			return null;
		}
    }
}

这里说明下上面的代码中的RunQueryOnBackgroundThread方法,重写该方法主要是每当用户输入的范围符合设置范围的时候就会调用该方法查询一次结果。其中SQLiteHelper.GetDatabase()方法是获取一个数据库的连接,通过执行Query方法,传入表名和要返回的数据内容(这里需要注意的是返回的必须包含一个_id的主键列)以及需要的SQL语句。 这里的spinner_layout是一个自定义的列表显示模版,我的里面很简单就是一个TextView。  

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/spinnerTarget"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textSize="35px" />

  接下来我们在Activity中添加以下的代码:  

var acTextView = FindViewById<AutoCompleteTextView>(Resource.Id.atvSingleNumber);
var pigAdapter = new PigArrayAdapter(this, null, 0);
acTextView.Adapter = pigAdapter;

然后我们就可以获得想要的结果了。

可能感兴趣的文章

评论区

发表评论 /

必填

选填

选填

◎欢迎讨论,请在这里发表您的看法及观点。