Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Hoe een keypress vangen in deze Android ContactSelector?

Pagina: 1
Acties:

  • kramer65
  • Registratie: Oktober 2003
  • Laatst online: 10-11 15:08
Ik werk aan een bestaande Android app waarin ik een ContactSelectorFragment heb. Hierin kan je letters typen waarmee het eronder suggesties weergeeft waarop je kan klikken om ze te selecteren. Gezien ik het nu mogelijk wil maken om een email adres in te geven dat nog niet in de contact lijst staat, wil ik keypresses vangen en kijken of de ingevoegde string een email adres is/lijkt. Om dit voor elkaar te krijgen moet ik dus eerst de String die wordt getypd kunnen "vangen".

Ik heb dus de onderstaande methodes gevonden waarin ik denk dat ik het eea moet aanpassen. Om te kijken of setupEventHandlers() wel de methode is die wordt aangeroepen, heb ik er een aantal Log-berichten ingezet:


Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        autoCompleteField = (AutoCompleteTextView) getView().findViewById(R.id.edit_contact);
        ContactsAutoSuggestAdapter autoSuggestAdapter = new ContactsAutoSuggestAdapter(getActivity());
        autoCompleteField.setAdapter(autoSuggestAdapter);
        this.resultList = (LinearLayout) getView().findViewById(R.id.contact_list);
        this.selectedAdapter = new ContactsAdapter(getActivity(), this);
        setupEventHandlers();
    }

    public void setupEventHandlers() {
        Log.e(this, "setupEventHandlers");
        autoCompleteField.setOnItemClickListener(this);
        autoCompleteField.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View view, int i, KeyEvent keyEvent) {
                Log.e(this, "Another letter inserted");

                switch (keyEvent.getKeyCode()) {
                case KeyEvent.KEYCODE_ENTER:
                    Log.e(this, "From within the SWITCH");
                    String value = ((TextView) view).getText().toString();
                    Log.e(this, "KEYS: " + value);
                    if(!TextUtils.isEmpty(value)) {
                        Log.e(this, "IS NOT EMPTY: " + value);
                        Contact contact = new Contact();
                        contact.setValue(value);
                        contact.setType(IdentityType.fromPattern(value));
                        addContact(contact);
                    }

                    return true;
                }
                return false;
            }
        });
        selectedAdapter.registerDataSetObserver(new DataSetObserver() {
            @Override
            public void onChanged() {
                Log.e(this, "onChanged");
                super.onChanged();
                fillContactList();
            }
        });
    }



Wanneer ik dit scherm open, print LogCat wel het bericht "setupEventHandlers", maar wanneer ik letters intyp, print het geen van de andere berichten (zoals de "Another letter inserted", "From within the SWITCH" of de ""KEYS: " + value".

Ik heb nu echt geen flauw idee hoe ik verder moet. |:( Heeft iemand enig idee hoe ik de ingevoerde karakters/string kan verkrijgen?

Gezien ik hier met mijn handen in mijn haar zit, zijn alle tips meer dan welkom!

  • noobgrinder
  • Registratie: Februari 2012
  • Laatst online: 21-11 12:20

noobgrinder

Prrrr bleep boem!

Iets met een ID denk ik.
probeer eens (regel 15) "autoCompleteField.setOnKeyListener(new View.OnKeyListener() {" te vervangen met
"autoCompleteField.setOnKeyListener(new autoCompleteField.OnKeyListener() {"

  • kramer65
  • Registratie: Oktober 2003
  • Laatst online: 10-11 15:08
Zojuist geprobeerd, maar het autoCompleteField (wat een AutoCompleteTextView is), heeft geen method "OnKeyListener" (dwz, Android Studio zegt "Cannot resolve symbol OnKeyListener").

Enig ander idee?

Het vreemde is ook, dat wanneer ik een aantal letters intyp, en die dan heel langzaam één voor één weer weghaal met backspace, dan print hij geen van de Log messages. Wanneer ik echter die letters weghaal door gewoon de backspace in te houden, dan print hij wel "Another letter inserted". Ik wordt helemaal gek hier..

Oh, deze code zit trouwens in een fragment. Misschien is dat belangrijk..

Alle tips nog steeds welkom!

[ Voor 52% gewijzigd door kramer65 op 04-12-2013 15:18 ]


  • noobgrinder
  • Registratie: Februari 2012
  • Laatst online: 21-11 12:20

noobgrinder

Prrrr bleep boem!

Ik heb zelf OnKeyListener nog nooit gebruikt.
Maar zou dit het kunnen zijn? http://stackoverflow.com/...oft-keyboard-android?lq=1

  • kramer65
  • Registratie: Oktober 2003
  • Laatst online: 10-11 15:08
Ah, dat zou het idd kunnen zijn! Maar wtf; een functie die alleen luisterd naar hardware keyboards? Dat is toch compleet zinloos? Maar de ex-collega die dit heeft gebouwd testte idd altijd in de emulator, en dus met een hardware keyboard.

Is weer een mooie reden waarom testen met echte apparaten het beste is.

Dankjewel iig! Je hebt me aan het einde gebracht van een urenlange fliptirade.. :)