2010-10-21 4 views
2

J'essaie d'implémenter un widget de saisie semi-automatique dynamique dans android. J'en ai fini avec les fonctionnalités majeures et l'autocomplétion implémentée est pour la recherche de vidéos sur youtube.Android auto-complète dynamique - correction mineure - code joint

Lorsque je commence à taper une lettre ou deux, l'achèvement automatique ne fonctionne pas. Mais quand je tape trois lettres ou plus cela fonctionne préfet. Cela fonctionne également quand je tape deux lettres et frappe un retour arrière. Je ne sais pas ce qui ne va pas avec le code.

J'ai téléchargé le code here

experts, de bien vouloir me guider. Je serais obligé si vous pouvez indiquer où je me suis trompé avec le code.

Toute aide à cet égard est très appréciée.

À l'avenir, Cordialement, Rony

import org.json.JSONArray; 
import org.json.JSONException; 
import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.widget.ArrayAdapter; 

public class YoutubeAutoComplete extends Activity { 
Youtube yt = new Youtube(); 
CustomAutoComplete myAutoComplete; 
ArrayAdapter<String> adapter; 
private JSONArray js; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.main); 

    myAutoComplete = (CustomAutoComplete) findViewById(R.id.autocomplete); 
    adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_dropdown_item_1line); 
    myAutoComplete.addTextChangedListener(textWatcher); 
    myAutoComplete.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 
} 

TextWatcher textWatcher = new TextWatcher() { 

    public void onTextChanged(final CharSequence s, int start, int before, 
      int count) { 

     Thread t = new Thread() { 

      public void run() { 
       try { 
        js = yt.GetSuggestions(s.toString()).getJSONArray(1); 
        messageHandler.sendEmptyMessage(0); 
       } catch (JSONException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

      } 
     }; 
     t.start(); 
    } 

    public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 

    } 

    public void afterTextChanged(Editable s) { 
    } 
}; 

private Handler messageHandler = new Handler() { 
    public void handleMessage(Message msg) { 
     adapter.clear(); 
     for (int i = 0; i < js.length(); i++) { 
      try { 
       adapter.add(js.getJSONArray(i).getString(0)); 
       System.out.println(js.getJSONArray(i).getString(0)); 
      } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     adapter.notifyDataSetChanged(); 
    } 
}; 

} 
+1

Il est plus utile si vous fournissez directement l'extrait pertinent du code dans la question. Les gens ne veulent pas aller télécharger des fichiers arbitraires dans Oracle pour vous aider. –

+0

Salut, j'ai modifié et ajouté du code source. – user264953

+0

Bonjour, maintenant que le code source requis est ici. Quelqu'un peut-il y jeter un coup d'oeil et savoir ce qui donne les problèmes que j'ai mentionnés ci-dessus. – user264953

Répondre