我在我的自动完成文本视图中添加了一个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)
当我点击下拉列表中的任何项目时,我仍然可以将适配器的String表示形式作为mAutoComplete中的文本
那是因为当你从下拉列表中选择一个项目时,自动完成小部件将调用该toString()方法来填充EditText输入的插入位置.
尝试重写类的toString()方法,customDS以从对象返回您想要查看的内容.
小智 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)
| 归档时间: |
|
| 查看次数: |
5212 次 |
| 最近记录: |