Dúvida sobre List View

61 views
Skip to first unread message

Fernando Maia

unread,
Sep 4, 2014, 10:02:06 PM9/4/14
to androidb...@googlegroups.com
Pessoal,

Estou desenvolvendo um despertador e na tela que coloquei para o usuário criar novos alarmes tem diversas opções (assim como qualquer outro aplicativo). Uma das funções é para o usuário escolher se quer que o aparelho vibre ou não (abaixo):

Imagem inline 1
Eu tenho uma dúvida em relação a isso que tenho quase certeza que é bem básica, mas não consigo encontrar resposta em nenhum lugar. Eu preciso que o usuário possa tocar em qualquer parte desta linha e marcar/desmarcar a caixa...eu resolvi isso colocando esses elementos dentro de um Frame Layout, mas não achei que seria a melhor solução. Achei que a solução pudesse aparecer com a utilização de uma List View, mas eu não sei como faço para que cada uma das linhas interprete o toque naquela opção. No momento, estou usando apenas TextViews separados por linhas (Views), assim:

Imagem inline 2

Também não acho que essa seja uma solução eficiente (apesar de estar funcionando), porém não encontrei outra forma de dispor estas opções na tela, de forma que elas executassem determinadas ações quando fossem pressionadas, como é o propósito delas. Não soube muito como buscar isso na Internet, então tentei alguns termos mais simples e não obtive resposta útil. Poderiam me ajudar?

Obrigado,

Fernando

Marcelo Alves

unread,
Sep 4, 2014, 11:18:11 PM9/4/14
to androidb...@googlegroups.com
Só por curiosidade, qual foi o motivo que te impediu de usar settings? https://developer.android.com/design/patterns/settings.html

Fernando Maia

unread,
Sep 5, 2014, 9:02:35 AM9/5/14
to androidb...@googlegroups.com
Oi Marcelo.

Sou desenvolvedor novo, estou desenvolvendo meu primeiro aplicativo no momento. O motivo foi que realmente eu não conhecia, apesar de ser exatamente o que eu procuro (até esqueci de mencionar no primeiro e-mail a página de configurações do Android como exemplo do que eu queria). Eu tenho como usar isso mesmo que não seja uma página de configurações? Provavelmente sim, né? Bom, vou dar uma pesquisada para ver se encontro como aplicar isso no meu projeto.

Obrigado pela dica!


2014-09-05 0:17 GMT-03:00 Marcelo Alves <marcel...@gmail.com>:
Só por curiosidade, qual foi o motivo que te impediu de usar settings? https://developer.android.com/design/patterns/settings.html

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Fernando Maia

unread,
Sep 5, 2014, 9:29:27 AM9/5/14
to androidb...@googlegroups.com
Marcelo,

Dei uma pesquisada e não sei se isso é exatamente o que eu preciso. A minha intenção é que seja possível adicionar diversos alarmes e, pelo que vi, o settings permite que apenas uma informação para cada opção seja salva. É isso mesmo? Se sim, tem alguma alternativa?

Obrigado,

Fernando

Clailton Jorge

unread,
Sep 10, 2014, 9:22:24 AM9/10/14
to androidb...@googlegroups.com
Fernando Maia, se você colocar em uma ListView mesmo, você pode colocar no item da ListView um CheckBox e para o usuário habilitar o CheckBox só clicando na linha, você pode implementar o método setOnItemClickListener da ListView e assim habilitar o CheckBox. Tá ai um exemplo: http://www.mkyong.com/android/android-listview-example/. Vlw

Vinny Valente

unread,
Sep 10, 2014, 12:30:43 PM9/10/14
to androidb...@googlegroups.com
É isso que vc esta querendo?

Cria a lista com os checks e no seu onCreate vc coloca o setOnItemClickListener

                // ListView Item Click Listener
listView.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {

// ListView Clicked item index
int itemPosition = position;

// ListView Clicked item value
String itemValue = (String) listView
.getItemAtPosition(position);

// Show Alert
Toast.makeText(getApplicationContext(),
"Posição :" + itemPosition + "  Item : " + itemValue,
Toast.LENGTH_SHORT).show();

}

});

No local da Toast vc pode fazer um switch

switch( operacao )
        {
            case 'Time':
                System.out.printf("%.2f + %.2f = %.2f", numero1, numero2, numero1 + numero2);
                break;        
                
            case 'Vibrate':
                System.out.printf("%.2f - %.2f = %.2f", numero1, numero2, numero1 - numero2);
                break;

Fernando Maia

unread,
Sep 11, 2014, 9:49:26 AM9/11/14
to androidb...@googlegroups.com
@Clailton

A ListView eu consigo criar tranquilamente. E sobre o ArrayAdapter, usei um ArrayList para quando o usuário tocar em "Days to Repeat", aparece uma lista com os dias da semana.

public void setRepeat(View view) {
        AlertDialog daysDialog;
        final CharSequence[] days = {" Sunday ", " Monday ", " Tuesday ", " Wednesday ", " Thursday ", " Friday ", " Saturday "};
        final ArrayList selectedDays = new ArrayList();

Imagem inline 1

O que faltou eu explicar é que os dois prints na primeira mensagem são da mesma tela. Veja:

Imagem inline 2

Eu queria deixar de uma forma que cada uma dessas opções seja "clicável" (clickable) e cada uma tenha uma função específica (que, no caso, já está funcionando):

  • Time: Abre um TimePickerDialog
  • Days to Repeat: Abre a lista de dias
  • Ringtone: Permitir selecionar algum ringtone pra tocar
  • Vibrate: Vibrar ou não o aparelho (não está funcionando ainda)
Só que eu fiz esse design manualmente, como mostro parte no código abaixo:

<EditText
        android:id="@+id/alarmName"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:hint="@string/hint_name" />

    <View
        android:id="@+id/view"
        android:layout_width="fill_parent"
        android:layout_height="3dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/alarmName"
        android:background="@android:color/darker_gray" />

    <TextView
        android:id="@+id/timeTitle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/view"
        android:clickable="true"
        android:onClick="setTime"
        android:paddingTop="5dp"
        android:text="@string/time_title"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/alarmTime"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/timeTitle"
        android:clickable="true"
        android:onClick="setTime" />

    <View
        android:id="@+id/view2"
        android:layout_width="fill_parent"
        android:layout_height="2dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/alarmTime"
        android:background="@android:color/darker_gray" />

Essas Views que coloquei são as linhas divisoras que eu usei...tenho certeza que existe uma forma bem mais simples de fazer isso.

@Vinny

Na verdade eu só tenho um Checkbox na tela, o de vibrar. Talvez essa parte do itemPosition me ajude com o problema que eu descrevi acima (das diferentes funções na mesma tela). Em relação ao Switch, não sei se me ajudaria, pois preciso de algo que vibre o aparelho quando estiver checked e não vibre quando não estiver. Pensei em usar um if desta forma:

    public void onCheckboxClicked(View view) {
        Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
        if (vibrateCheckbox.isChecked()) {
            v.vibrate(500);
        }
    }

Só que, por enquanto, ainda não está funcionando...

@topic

Complementando, peguei um exemplo aqui para mostrar mais ou menos o que quero fazer. 


No terceiro print, existe uma tela que tem todas as opções do alarme. É algo bem próximo a isso que quero, mas que tenho quase certeza que não foi feito da forma que eu fiz (colocando cada view na tela manualmente).


Obrigado. 

Vinicius Valente

unread,
Sep 11, 2014, 10:04:04 AM9/11/14
to androidb...@googlegroups.com
Fernando,

Se vc criar um ListView com o exemplo que te passei já vai ter metade do caminho andado, depois é tratar o click com listView.setOnItemClickListener que passei como exemplo e não vai importar se tu vai usar IF ou Switch, dentro da condição que vc quer vc vai colocar pra vibrar ou não... Pra fazer vibrar eu não sei, mas na documentação tem http://developer.android.com/reference/android/os/Vibrator.html




--
You received this message because you are subscribed to a topic in the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/androidbrasil-dev/9IhH9_5k5Co/unsubscribe.
To unsubscribe from this group and all its topics, send an email to androidbrasil-...@googlegroups.com.

Fernando Maia

unread,
Sep 15, 2014, 11:36:17 AM9/15/14
to androidb...@googlegroups.com
Vinicius,

Desculpe a demora em responder. Estive ocupado esses dias. Obrigado pela dica, é exatamente isso que eu precisava. Sobre vibrar, eu já peguei uns exemplos aqui e já havia dado uma olhada nessa página que você mandou.

Obrigado pela ajuda.

Abraços.
Reply all
Reply to author
Forward
0 new messages