2017-02-23 44 views
0

Эй, ребята, очень новичок в студии Android, как и в названии. Я попытался поместить текст в EditText в var, называемый «имя пользователя», который я хочу использовать в своем внутреннем классе, но я не знаю как сделать его доступным изнутри.Студия Android - как получить доступ к EditText изнутри внутреннего класса?

вот что мне делать с EditText, в OnCreate: (KeyListener это имя моего внутреннего класса)

KeyListener KL_Instance = new KeyListener(); 
EditText input_text = (EditText) findViewById(R.id.inputText); 
input_text.setOnKeyListener(KL_Instance); 

String username = input_text.getText().toString(); 

И вот что я пытаюсь сделать в пределах внутреннего класса:

public class KeyListener implements View.OnKeyListener 
{ 
    @Override 
    public boolean onKey(View view, int keyCode, KeyEvent keyEvent) 
    { 
     if (keyCode == KeyEvent.KEYCODE_AT) 
     { 
      Toast.makeText(MainActivity.this, "Do not type @", Toast.LENGTH_LONG).show(); 
     } 

     //if the enter key is pressed, then check to see if username is 8 or more chars 
     if (keyCode == keyEvent.KEYCODE_ENTER) 
     { 
      //if it is, display it 
      if(username.length => 8) 
      { 
       Toast.makeText(MainActivity.this, "Hi, " + username, Toast.LENGTH_LONG).show(); 
      }else //else, ask for a username of atleast 8 chars 
      { 
       Toast.makeText(MainActivity.this, "Please enter a username that is 8 or more chars", Toast.LENGTH_LONG).show(); 
      } 
     } 

     return false; 
    } 
} 

Но он говорит, «не может разрешить символ" имя пользователя», и я не могу доступ«input_text»в этом классе либо, так что если кто-то может помочь мне здесь было бы весьма признателен, Спасибо заранее :)

ответ

1

Если вы хотите сохранить значение EditText вам необходимо обновить его с вашим слушателем и зачем использовать KeyListener и почему не просто TextWatcher как в этом посте here

EDIT:

Вы должны сделать что-то как то

input_text.addTextChangedListener(new TextWatcher() { 

    @Override 
    public void afterTextChanged (Editable s){ 
     username = s.toString(); 
    } 

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

    @Override 
    public void onTextChanged (CharSequence s,int start, 
    int before, int count){ 
    } 
}); 

TextWatcher является реализация шаблона проектирования Observer так что этот код будет Тригер каждый раз кто-то использовать EditText, вам приходится иметь дело с этим, делая вашу логику в TextWatcher как вызов службы или что-то другое ответственный за ручку Имя пользователя.

+0

Еще не узнали о TextWatchers, что вы имеете в виду, обновив его своим слушателем? :) – flanelman