Monteiro João Bosco - Google Android: crie aplicações para celulares e tablets стр 20.

Шрифт
Фон

android:text="@string/selecione" />

</TableRow>

</TableLayout>

<!-- Mais campos virão aqui -->

</LinearLayout>

80

Casa do Código

Capítulo 3. Domine os principais elementos de Interface Gráfica

</ScrollView>

Para implementarmos a activity e fazê-la abrir a caixa de diálogo para a seleção da data corretamente, no método onCreate inicializamos três variáveis para representar o ano, mês e dia com base na data atual. Adicionalmente, alteramos o texto do botão para exibir a data atual e manter o usuário informado sobre a data que foi selecionada.

public class GastoActivity extends Activity {

private int ano, mes, dia;

private Button dataGasto;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.gasto);

Calendar calendar = Calendar.getInstance();

ano = calendar.get(Calendar.YEAR);

mes = calendar.get(Calendar.MONTH);

dia = calendar.get(Calendar.DAY_OF_MONTH);

dataGasto = (Button) findViewById(R.id.data);

dataGasto.setText(dia + "/" + (mes+1) + "/" + ano);

}

}

O método selecionarData apenas invoca o método showDialog da pró-

pria Activity passando um identificador que indica o diálogo que deve ser aberto.

Esta identificação é necessária, pois podemos ter inúmeras diálogos gerenciados pela mesma activity. É comum encontrar códigos que fazem uso de constantes para representar os diálogos que serão abertos, no entanto, preferimos utilizar o identificador da própria view que deseja abrir o diálogo uma vez que ele já é único para o layout e já está declarado.

public void selecionarData(View view){

showDialog(view.getId());

}

Quando o método showDialog é invocado para criar uma caixa de diálogo

pela primeira vez, o método onCreateDialog é chamado, passando o identifica-

dor informado, para que seja instanciado um novo DatePickerDialog. Se for

81

3.4. DatePicker

Casa do Código

necessário executar alguma operação para alterar informações da caixa de diálogo sempre que ela for aberta, bastaria reescrever o método onPrepareDialog.

Por fim, temos que implementar um listener que será responsável por tratar

o resultado, ou seja, a data escolhida pelo usuário. Isso se faz através da definição de uma classe anônima, que implementa OnDateSetListener, para o

listener utilizado. Esta classe possui apenas um método que será invocado pelo próprio DatePickerDialog quando uma data for selecionada, que é o método

onDateSet.

Neste método devemos colocar nossas regras de negócio, como a criação de uma

data ou atualização de uma já existente, algum tipo de validação para verificar se a data pertence a um período válido etc. Além disso é importante exibir para o usuá-

rio, a título de informação, qual foi a data selecionada. Em nossa implementação, recuperamos os valores de ano, mês e dia informados e atualizamos o texto do botão para apresentar como resposta ao usuário. Agora já temos a seleção da data do gasto funcionando!

@Override

protected Dialog onCreateDialog(int id) {

if(R.id.data == id){

return

new DatePickerDialog(this, listener, ano, mes, dia);

}

return null;

}

private OnDateSetListener listener = new OnDateSetListener() {

@Override

public void onDateSet(DatePicker view,

int year, int monthOfYear, int dayOfMonth) {

ano = year;

mes = monthOfYear;

dia = dayOfMonth;

dataGasto.setText(dia + "/" + (mes+1) + "/" + ano);

}

};

Agora que as nossas datas funcionam e já permitimos a escolha dela, podemos

voltar ao layout do gasto.xml. Ainda dentro do LinearLayout, adicionamos

os dois campos para a descrição e o local e um botão para cadastrar o gasto:

<TextView

82

Casa do Código

Capítulo 3. Domine os principais elementos de Interface Gráfica

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/descricao" />

<EditText

android:id="@+id/descricao"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:inputType="text" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/local" />

<EditText

android:id="@+id/local"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:inputType="text" />

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:onClick="registrarGasto"

android:text="@string/gastei" />

83

3.5. Spinner

Casa do Código

Figura 3.7: Seleção de datas com DatePickerDialog

Classes anônimas

Para os desenvolvedores que ainda não estão acostumados com a

sintaxe do Java, é comum estranhar a definição de classes anônimas.

Existem diversos artigos na internet que explicam como compreendê-

las e quando usar, sendo que uma das explicações mais comenta-

das está disponível no blog da Caelum, em http://blog.caelum.com.br/

classes-aninhadas-o-que-sao-e-quando-usar/

3.5

Spinner

Na tela de registro de gastos vamos incluir um widget para seleção de itens em uma lista suspensa. Conhecido em outras plataformas como combo box ou drop-down,

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке