2017-02-23 80 views
0

嘿家伙很新的android工作室,就像标题说,我试图把文本内的EditText到一个名为“用户名”的变种,我希望能够在我的内部类中使用,但我不知道如何从内部访问它。Android studio - 如何从内部类访问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

编辑:

你应该做的事情这样

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是设计模式观察者的实现,因此这段代码将是TRIGER每次有人使用的EditText,你必须处理这个做的TextWatcher你的逻辑就像调用服务或别的东西,负责处理用户名。

+0

还没有了解TextWatchers,那么通过与我的听众更新它意味着什么? :) – flanelman