Android findViewById vs @InjectView

O uso de findViewById em Android é algo que considero inconveniente, ele acaba fazendo você escrever mais código, com isso cresce o seu código de forma desnecessária, dificulta a leitura, manutenção, etc. Entretanto temos uma solução para este problema e que se chama @InjectView que é parte do framework RoboGuice, este irá tornar nosso código mais claro, menor e fácil de manter ao substituirmos findViewById, vamos ver como funciona.

Vamos supor que temos o EditText abaixo definido em nosso Activity.


A forma de acesso através do findViewById ficaria assim:

class Main extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main);
        EditText nome;
        nome = (EditText) findViewById(R.id.nomeEditText);
        nome.setText( "Meu nome é João"); 
    } 
}

Para usar @InjectView nosso Activity passa a herdar de RoboActivity (não esqueça de baixar o RoboGuice aqui) ficando assim:

class Main extends RoboActivity { 
     @InjectView (R.id.nomeEditText)      EditText nome; 

    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main);
        nome.setText( "Meu nome é João" ); 
    } 
}

Desta forma não precisamos obter uma referência ao objeto “nome” toda vez que for necessário acessá-lo, pois o mesmo está sendo feito pela @InjectView. Em telas onde temos vários objetos a manutenção e leitura do código será mais fácil como você pode ver no exemplo abaixo.

class Main extends RoboActivity { 
     @InjectView (R.id.nomeEditText)      EditText nome; 
     @InjectView (R.id.sobrenomeEditText) EditText sobrenome; 
     @InjectView (R.id.fotoImage)         ImageView foto; 

    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main);
        nome.setText( "Meu nome é João" ); 
        sobrenome.setText( "Meu sobrenome é Silva" ); 
        foto.setImageBitmap( null ); 
    } 
}

Espero que esta pequena dica tenha ajudado.

3 respostas

Deixe uma resposta

Want to join the discussion?
Feel free to contribute!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *


Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.