onItemClick设置文本到AutoCompleteTextView

Arc*_*pgc 5 android

我在我的自动完成文本视图中添加了一个onTextChangedListener并使用异步任务填充它

mAutoComplete.addTextChangedListener(new TextWatcher() {
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
    }
    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
        //run an async tast to get autocompletes
    }
    @Override
    public void afterTextChanged(Editable s) {
    }
});

private class getAutoCompletes extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... params) {
        //get autocompletes
    }
    @Override
    protected void onPostExecute(String result) {
        //create an adapter
        mAdapter AutoCompleteAdapter = new mAdapter(
                mActivity.this,
                R.layout.m_layout,
                R.id.m_id, autocompletesList);
        //set it to the autocomplete textview
        mAutoComplete.setAdapter(AutoCompleteAdapter);
        //show the dropdown
        mAutoComplete.showDropDown();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我就setOnItemClickListener(new AdapterView.OnItemClickListener() {}在mAutoComplete上了.但在其中无所作为.

当我点击下拉列表中的任何项目时,我仍然可以将适配器的String表示形式作为mAutoComplete中的文本

com.xxxx.app.mAdapter@4342ca0
Run Code Online (Sandbox Code Playgroud)

否我在哪里设置mAutoComplete的文本.

编辑:

适配器类:

public class mAdapter extends ArrayAdapter<customDS> {

    private LayoutInflater mInflater = null;
    private Context ctx;
    public ArrayList<customDS> values = new ArrayList<customDS>();

    public mAdapter(Context context, int resource,
            int textViewResourceId, ArrayList<customDS> objects) {
        super(context, resource, textViewResourceId, objects);
        values = objects;
        ctx = context;
        mInflater = (LayoutInflater) ctx
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public int getCount() {
        return values.size();
    }

    public customDS getItem(int position) {
        return values.get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    public static class ViewHolder {
        public TextView title;
        public TextView description;
    }

    public View getView(final int position, View convertView, ViewGroup parent) {

        ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = mInflater.inflate(R.layout.m_layout,
                    parent, false);
            holder.title = (TextView) convertView
                    .findViewById(R.id.m_id);
            holder.description = (TextView) convertView
                    .findViewById(R.id.m_id2);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.title.setText(values.get(position).title);
        holder.description.setText(values.get(position).description);

        return convertView;
    }
}
Run Code Online (Sandbox Code Playgroud)

jar*_*ker 18

您可以创建AutoCompleteTextView的子类并覆盖"replaceText"方法,因为在它的超类(AutoCompleteTextView)中,"replaceText"用于在单击结果时替换视图中的当前文本.

public class CustomAutoCompleteTextView extends AutoCompleteTextView {
    public CustomAutoCompleteTextView(Context context) {
        super(context);
    }

    public CustomAutoCompleteTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomAutoCompleteTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void replaceText(CharSequence text) {
        // do nothing so that the text stays the same
    }
}
Run Code Online (Sandbox Code Playgroud)


Luk*_*rog 7

当我点击下拉列表中的任何项目时,我仍然可以将适配器的String表示形式作为mAutoComplete中的文本

那是因为当你从下拉列表中选择一个项目时,自动完成小部件将调用该toString()方法来填充EditText输入的插入位置.

尝试重写类的toString()方法,customDS以从对象返回您想要查看的内容.

  • @XtremeBiker覆盖`AutoCompleteTextView`的`convertSelectionToString()`方法,并返回一个`CharSequence`,表示你想要的所选对象的任何部分.默认情况下,该方法在所选项上调用`toString()`. (3认同)

小智 5

这更简单。尝试将其添加到您的活动中。这个对我有用。

mAutoComplete.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        mAutoComplete.setText(((TextView) view).getText());

        // Or maybe you need to do something like this (it depends from your R.layout.m_layout):
        // LinearLayout l = (LinearLayout) view;
        // TextView t = (TextView) l.getChildAt(0);
        // mAutoComplete.setText(t.getText());
    }
});
Run Code Online (Sandbox Code Playgroud)