0

データベースを含むAndroidアプリの検索エンジンを作成しています。私の現在の実装は次のとおりです。

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.result_item, R.id.txtVerbName, verbs);
AutoCompleteTextView txtSearch = (AutoCompleteTextView) findViewById(R.id.txtSearch);
txtSearch.setAdapter(adapter);

ただし、配列がアタッチされた状態で値が変更されるテキストビュー(「動詞」)として「txtVerbName」(TextView)を配置したことに気付くでしょう。txtVerbNameに値をアタッチしてから、同じレイアウトの別のテキストビューに別の値をアタッチできるように、これを機能させるにはどうすればよいですか?

4

1 に答える 1

0

これを実現するには、カスタムアダプタを使用します。

public class AutoCompleteCursorAdapter extends CursorAdapter implements Filterable {

private TextView txtVerbName, txtVerbDefinition;
private Cursor mCursor;
private Context mContext;
private final LayoutInflater mInflater;

public AutoCompleteCursorAdapter(Context context, Cursor c) {
    super(context, c, true);
    mInflater = LayoutInflater.from(context);
    mContext = context;
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
    TextView txtVerbName = (TextView) view.findViewById(R.id.txtVerbName);
    TextView txtVerbDefinition = (TextView) view.findViewById(R.id.txtVerbDefinition);

    txtVerbName.setText(cursor.getString(1));
    txtVerbDefinition.setText(cursor.getString(2));
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    final View view = mInflater.inflate(R.layout.result_item, parent, false);
    return view;
}

@Override
public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
    // this is how you query for suggestions
    if (getFilterQueryProvider() != null) {
        return getFilterQueryProvider().runQuery(constraint);
    }
    if (constraint != null) {

        DBAdapter db = new DBAdapter(mContext);
        db.open();

        mCursor = db.getVerbsContaining(constraint);

        mCursor.moveToFirst();
        db.close();
    }
    return mCursor;
}

}

于 2012-05-30T02:18:31.857 に答える