2016-05-30 23 views
1

Ich mache eine Wörterbuch-App. Ich habe eine AutoCompleteTextView und eine große Liste von Strings. Wenn ich ArrayAdapter auf AutoCompleteTextView setze, ohne es zu verkleinern, bleibt es hängen. Deshalb habe ich beschlossen, Adapter mit TextWatcher einzustellen. Text in textView ändert sich, textView Adapter ändert sich. Aber wenn ich versuche, das ausgewählte Element mit onitemClickListener auszuwählen, gibt es indexoutofboundsException zurück, da textWatcher vor onclickListener- und Adapteränderungen arbeitet. Gibt es eine Möglichkeit zu überprüfen, ob ein Element in TextWatcher geklickt wird? Danke für Ihre HilfeÜberprüfen, ob setOnItemClickListener angeklickt ist oder nicht

final AutoCompleteTextView textView = (AutoCompleteTextView) rootView.findViewById(R.id.autoCompleteTextView1); 
    textView.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       if(s.length() != 0){ 
        db.openDataBase(); 
        wl = db.getWordList(s.toString()); 
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_dropdown_item_1line, wl.getWordList()); 
        textView.setAdapter(adapter); 
       } 
      } 


     textView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       if(parent.getItemAtPosition(position) != null); 
        Log.i("Debug",parent.getItemAtPosition(position)+""); 
       } 


     }); 

Hier ist der Fehler 05-30 10:30:14.789: E/AndroidRuntime(10370): FATAL EXCEPTION: main 05-30 10:30:14.789: E/AndroidRuntime(10370): Process: com.alynurly.maralsozluk, PID: 10370 05-30 10:30:14.789: E/AndroidRuntime(10370): java.lang.IndexOutOfBoundsException: Invalid index 5, size is 4 05-30 10:30:14.789: E/AndroidRuntime(10370): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 05-30 10:30:14.789: E/AndroidRuntime(10370): at java.util.ArrayList.get(ArrayList.java:308) 05-30 10:30:14.789: E/AndroidRuntime(10370): at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:337) 05-30 10:30:14.789: E/AndroidRuntime(10370): at android.widget.AdapterView.getItemAtPosition(AdapterView.java:764) 05-30 10:30:14.789: E/AndroidRuntime(10370): at com.alynurly.maralsozluk.MainActivity$PlaceholderFragment$1.onItemClick(MainActivity.java:92) 05-30 10:30:14.789: E/AndroidRuntime(10370): at android.widget.AutoCompleteTextView.performCompletion(AutoCompleteTextView.java:902) 05-30 10:30:14.789: E/AndroidRuntime(10370): at android.widget.AutoCompleteTextView.access$500(AutoCompleteTextView.java:91) 05-30 10:30:14.789: E/AndroidRuntime(10370): at android.widget.AutoCompleteTextView$DropDownItemClickListener.onItemClick(AutoCompleteTextView.java:1192) 05-30 10:30:14.789: E/AndroidRuntime(10370): at android.widget.AdapterView.performItemClick(AdapterView.java:299) 05-30 10:30:14.789: E/AndroidRuntime(10370): at android.widget.AbsListView.performItemClick(AbsListView.java:1113) 05-30 10:30:14.789: E/AndroidRuntime(10370): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2904) 05-30 10:30:14.789: E/AndroidRuntime(10370): at android.widget.AbsListView$3.run(AbsListView.java:3638) 05-30 10:30:14.789: E/AndroidRuntime(10370): at android.os.Handler.handleCallback(Handler.java:733) 05-30 10:30:14.789: E/AndroidRuntime(10370): at android.os.Handler.dispatchMessage(Handler.java:95) 05-30 10:30:14.789: E/AndroidRuntime(10370): at android.os.Looper.loop(Looper.java:136) 05-30 10:30:14.789: E/AndroidRuntime(10370): at android.app.ActivityThread.main(ActivityThread.java:5021) 05-30 10:30:14.789: E/AndroidRuntime(10370): at java.lang.reflect.Method.invokeNative(Native Method) 05-30 10:30:14.789: E/AndroidRuntime(10370): at java.lang.reflect.Method.invoke(Method.java:515) 05-30 10:30:14.789: E/AndroidRuntime(10370): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827) 05-30 10:30:14.789: E/AndroidRuntime(10370): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643) 05-30 10:30:14.789: E/AndroidRuntime(10370): at dalvik.system.NativeStart.main(Native Method)

+0

oder gibt es eine andere Möglichkeit, diesen Adapter ohne Einfrieren der App zu setzen? Hilf mir – alynurly

+0

Adapteränderungen bedeuten? Veröffentlichen Sie den vollständigen Stacktrace. –

Antwort

1

Vielen Dank für Ihre Hilfe. Ich habe gelernt, dass es möglich ist zu überprüfen, ob Dropdown-Element geklickt wird, indem Sie autoCompleteTextView.isPerformingOperation() verwenden. Also jetzt sieht mein neuer Code wie

@Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
    //doesn't work if list is clicked 
      if(s.length() != 0 && !textView.isPerformingCompletion()){ 
       db.openDataBase(); 
       wl = db.getWordList(s.toString()); 
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_dropdown_item_1line, wl.getWordList()); 
       textView.setAdapter(adapter); 
      } 
     } 
Verwandte Themen