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.
Melhora bastante isso, mas ainda teremos que fazer a injection para cada elemento da View.
Vou buscar uma maneira, na forma de um loop, fazendo isso para todos os elementos de uma View.
Abraços…
É preciso importar alguma biblioteca?
O eclipse não reconhece @InjectView
Obrigado!
Oi Wellington boa pergunta, você precisa baixar o RoboGuice e extender the RoboActivity, atualizei o artigo com o link.