我有一个显示推荐视频的AutoCompleteTextView
。当用户在其中输入文本时,我的应用程序根据文本用户类型从服务器获取数据。但是当用户更改文本(按字符输入字符)时,Dropdown会自动关闭。然后我获取数据并再次显示Dropdown。所以我的Dropdown被解雇并立即显示。它会对用户造成不良影响(特别是当用户快速输入时)
如何在用户更改文本时避免删除Dropdown。
因此,当我从服务器获取数据时,我可以调用myAdapter。notifyDataChanged
()。
提前致谢。
P / S:我听说解决方案是扩展AutoCompleteTextView
。但我不知道那样做。
答案 0 :(得分:1)
这是我的解决方案。
public class CustomAutoCompleteTextView extends AutoCompleteTextView {
public CustomAutoCompleteTextView(Context context) {
this(context, null);
// TODO Auto-generated constructor stub
}
public CustomAutoCompleteTextView(Context context, AttributeSet attrs) {
this(context, attrs, android.R.attr.autoCompleteTextViewStyle);
}
public CustomAutoCompleteTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean enoughToFilter() {
// TODO Auto-generated method stub
return true;
}
}
public class SearchSuggestionAdapter extends ArrayAdapter<SearchObject>
{
.......
@Override
public Filter getFilter() {
// TODO Auto-generated method stub
Filter filter = new Filter() {
String keyword;
@Override
public CharSequence convertResultToString(Object resultValue) {
// TODO Auto-generated method stub
return keyword;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
// TODO Auto-generated method stub
if(results.values != null)
notifyDataSetChanged();
else
notifyDataSetInvalidated();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
// TODO Auto-generated method stub
keyword = constraint.toString();
final FilterResults filterResults = new FilterResults();
filterResults.values = mList;
filterResults.count = mList.size();
return filterResults;
};
return filter;
}
}
因为我从服务器获取数据。所以在performFiltering
中,我只返回一个非空对象
希望对你有所帮助。
答案 1 :(得分:1)
在适配器中实现Filterable,并使用Filter。
试试这个:
public class ListAdapter extends ArrayAdapter<String> implements Filterable{
private List<String> listResult;
...
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if (constraint != null) {
// Assign the data to the FilterResults
filterResults.values = listResult;
filterResults.count = listResult.size();
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
notifyDataSetChanged();
}
else {
notifyDataSetInvalidated();
}
}};
return filter;
}
}
答案 2 :(得分:0)
我猜测,您将根据自动完成文本视图中的字符串从服务器获取数据列表。这样适配器就会在文本发生变化时加载已过滤的列表。尝试实现CursorAdapter。它是解决您问题的更好方案。试试让我知道。