package com.mcxiaoke.minicat.adapter; import android.app.Activity; import android.content.Context; import android.database.Cursor; import android.provider.BaseColumns; import android.support.v4.widget.CursorAdapter; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.mcxiaoke.minicat.AppContext; import com.mcxiaoke.minicat.R; import com.mcxiaoke.minicat.dao.model.IBaseColumns; import com.mcxiaoke.minicat.dao.model.UserColumns; import com.mcxiaoke.minicat.dao.model.UserModel; /** * @author mcxiaoke * @version 1.3 2011.12.05 */ public class AutoCompleteCursorAdapter extends CursorAdapter { private static final String TAG = AutoCompleteCursorAdapter.class .getSimpleName(); private Activity mContext; private LayoutInflater mInflater; public AutoCompleteCursorAdapter(Activity context, Cursor cursor) { super(context, cursor, FLAG_REGISTER_CONTENT_OBSERVER); mContext = context; mInflater = LayoutInflater.from(mContext); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { View view = mInflater.inflate(R.layout.list_item_autocomplete, parent, false); return view; } @Override public void bindView(View view, Context context, Cursor cursor) { String id = cursor.getString(cursor.getColumnIndex(IBaseColumns.ID)); String screenName = cursor.getString(cursor .getColumnIndex(UserColumns.SCREEN_NAME)); TextView tv = (TextView) view.findViewById(R.id.name); tv.setText("@" + screenName + " (" + id + ")"); } @Override public CharSequence convertToString(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(UserColumns.SCREEN_NAME)); } // private static final Pattern PATTERN_SQL=Pattern.compile("[\\W]+"); @Override public Cursor runQueryOnBackgroundThread(CharSequence constraint) { if (TextUtils.isEmpty(constraint)) { return null; } if (AppContext.DEBUG) { Log.d(TAG, "constraint = " + constraint); } final String[] projection = new String[]{BaseColumns._ID, IBaseColumns.ID, UserColumns.SCREEN_NAME, IBaseColumns.TYPE, IBaseColumns.OWNER}; String where = IBaseColumns.OWNER + " = '" + AppContext.getAccount() + "' AND " + IBaseColumns.TYPE + " = '" + UserModel.TYPE_FRIENDS + "' AND " + UserColumns.SCREEN_NAME + " like '%" + constraint + "%' OR " + IBaseColumns.ID + " like '%" + constraint + "%'"; if (AppContext.DEBUG) { Log.d(TAG, "runQueryOnBackgroundThread where=" + where); } return mContext.getContentResolver().query(UserColumns.CONTENT_URI, projection, where, null, null); } }