안드로이드에서 자동 완성 문제가 있습니다. 액티비티 자체의 데이터를 하드 코딩하는 대신, 일치하는 모든 키를 누를 때마다 다른 애플리케이션에서 데이터를 동적으로 읽으려고했습니다. 제 프로그램 아래에서 제 잘못을 제게 제안 해주십시오.안드로이드의 자동 완성 기능이 동적 데이터로 작동하지 않습니다.
참고 : 키를 처음 누를 때 결과가 채워집니다. 그런 다음 입력 된 텍스트를 지우고 다른 문자를 입력하면 결과는 자동 완성 드롭 다운 상자에 표시되지 않습니다. 모든 키 누름에서 다른 응용 프로그램을 사용 중이지만 자동 완성 드롭 다운 상자에 채워지지 않습니다.
나는 textView.showDropDown()을 시도했다. 및 adapter.setNotifyOnChange (true); 옵션. 그러나 사용하지 마십시오.
package com.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
public class HelloAutoCompleteActivity extends Activity {
List countries = new ArrayList();
String url = ""; //some application url
AutoCompleteTextView textView;
ArrayAdapter<String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country);
textView.addTextChangedListener(new CostomTextWatcher());
textView.setThreshold(1);
adapter = new ArrayAdapter<String>(this, R.layout.list_item, countries);
textView.setAdapter(adapter);
}
private class CostomTextWatcher implements TextWatcher {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if (s.length() > 0) {
countries.clear();
String readTwitterFeed = readFeed(s.toString());
System.out.println(readTwitterFeed);
try {
JSONObject menuObject = new JSONObject(readTwitterFeed);
JSONArray menuitemArray = menuObject
.getJSONArray("objectNameList");
for (int i = 0; i < menuitemArray.length(); i++) {
System.out.println(menuitemArray.get(i));
countries.add(menuitemArray.get(i).toString());
}
// adapter.notifyDataSetChanged();
// adapter.setNotifyOnChange(true);
// textView.setAdapter(adapter);
// textView.setThreshold(1);
// textView.setAdapter(adapter);
// textView.showDropDown();
// adapter.setNotifyOnChange(true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public String readFeed(String val) {
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(
url);
try {
HttpResponse response = client.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
System.out.println("200");
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(
new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
} else {
System.out.println("else block");
Log.e(HelloAutoCompleteActivity.class.toString(),
"Failed to download file");
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return builder.toString();
}
}
입니다. 필터링 프로세스가 자동으로 처리됩니다. 왜 필터링하려고합니까? 더 설명해 주시겠습니까? –
이것 좀 도와 주시겠습니까? 추가 진행 방법? –