Google의 제안 사항을 보여주는 AutoCompleteTextView를 만들려고하지만 제목과 같습니다. 전체 ArrayList가 개별적인 제안 대신 제안으로 표시됩니다.AutoCompleteTextView 별도의 문자열 대신 전체 ArrayList를 표시하는 사용자 지정 ArrayAdapter
개별 문자열을 어떻게 표시합니까? 어댑터에 잘못 추가하고 있습니까?
은 여기에 다른 사람들이 같은 일에 문제가 있었다하지만 난 아무것도 관련을 찾을 수 있는지 확인하기 위해 검색을 몇 가지했다
class AutoCompleteAdapter extends ArrayAdapter<String> implements Filterable {
private ArrayList<String> data;
private static final String BASE_URL = "http://suggestqueries.google.com/complete/search?";
private static final String CLIENT = "client=firefox"; // firefox = JSON | toolbar = toolbar
private static final String SEARCH_URL = BASE_URL + CLIENT + "&q=";
private final static String UTF8 = "UTF-8";
AutoCompleteAdapter(@NonNull Context context, @LayoutRes int resource) {
super(context, resource);
this.data = new ArrayList<>();
}
@Override
public int getCount() {
return data.size();
}
@Nullable
@Override
public String getItem(int index) {
return data.get(index);
}
@NonNull
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint != null) {
HttpURLConnection conn = null;
InputStream input = null;
try {
URL url = new URL(SEARCH_URL + constraint.toString());
conn = (HttpURLConnection) url.openConnection();
input = conn.getInputStream();
InputStreamReader reader = new InputStreamReader(input, UTF8);
BufferedReader buffer = new BufferedReader(reader, 8192);
StringBuilder builder = new StringBuilder();
String line;
while ((line = buffer.readLine()) != null) {
builder.append(line);
}
JSONArray terms = new JSONArray(builder.toString());
ArrayList<String> suggestions = new ArrayList<>();
for (int i = 0; i < terms.length(); i++) {
String term = terms.getString(i);
suggestions.add(term);
}
results.values = suggestions;
results.count = suggestions.size();
data = suggestions;
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (input != null) {
try {
input.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
if (conn != null) conn.disconnect();
}
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
notifyDataSetChanged();
} else notifyDataSetInvalidated();
}
};
}
}
ArrayAdapter와 내 사용자 정의입니다.
나는 여러 해 동안 내 머리카락을 풀어 왔습니다. 미리 감사드립니다.