ListView customizado

Eu tenho um arraylist que vem com algumas tarefas a serem feitas tipo dia 10/12/12 lavar o carro ,10/12/12 abastecer o carro , dia 09/12/12 fazer compras ,09/12/12 pintar o carro , e dia 20/12/12 vender
dia 20/12/12 comprar,etc.
então carrago todo o arraylist na tela do android com um layout linear blablabla. até qui tudo beleza.
Mais o cliente pedio pra listar assim hoje ontem amanhã , ou seja agrupar as tarefas por data então o grupo de hoje mostraria tudo que tenho que fazer pegando a data de hoje no android comparando se
existe na lista agrupar e exibir, depois pegar a data de hoje subtrair um dia e agrupar e exibir ontem e a mesma coisa para a data de amanhã

Hoje
tarefa 1
tarefa 2
tarefa 3

Ontem
tarefa 1
tarefa 2
tarefa 3
tarefa 4

Amanhã
tarefa 1
tarefa 2
tarefa 3
tarefa 4
tarefa 5

ficaria exibido desta forma, alguém pode me ajudar como montar este layout e como fica a classe que seta tudo para o layout ?

Não sei no android, mas não tem jeito de criar um accordion ou algo que você expande ?

Vamos falar de java , no android eu me viro, então sera que um Map daria certo agrupava as datas como hoje ontem amanha, estas seriam as chaves e depois exibia agrupado de acordo com as chaves, alguém sabe como fazer ?

Ah ok.
Você pode fazer um mapa sim, de datas e como chaves as tarefas.
só cuidado com o date por conta de considerar hora,minuto e milissegundo.

e no java você pode add ou diminuir dias através da classe calendar, metodo add.

Entendi, mais as chaves devem ser as datas , por que as tarefas serão dinamicas.
ou seja key hoje, tarefas pra hoje, key ontem tarefas de ontem , key amanhã tarefas de amanhã.
Voce tem um exemplo ai ?

Tem que ver como seus dados vêm para agrupá-los, mas
Algo assim talvez resolva.


Map<Date,List<Tarefa> > mapa = new HashMap<Date,List<Tarefa> >();

daí para adicionar um valor você faz.

List<Tarefas> listas = 
//tem valor
if(null != mapa.contains(data)){
     tarefas = mapa.get(data);
     tarefas.add(new Tarefa()); 
     mapa.add(data,tarefas);
}

não tem data ainda.
else{
  tarefas  = new ArrayList<Tarefas>();
  tarefas.add(new Tarefa());
  mapa.add(data,tarefas);

}

}

Seria assim para aparecer
file:///C:/Users/ralmeida/Desktop/listaAndroid.png

Manda o email que eu mando o layout da tela , preciso entregar amanhã

Ainda não conseguir fazer,mais pesquisando descobrir que eu tenho que criar um listview com cabeçalho, alguém tem um exmplo simples

Duas maneiras. Se os dados vem do banco, eu costumo usar o SectionCustomAdapter. Não tem no Android, mas tem uma implementação open source aqui:

https://github.com/monxalo/android-section-adapter/blob/master/src/com/monxalo/android/widget/SectionCursorAdapter.java

Você especifica por qual coluna quer agrupar. É como se tu utilizasse um SimpleCursorAdapter, mas seccionado.

A segunda alternativa é usar um ExpandableListView (e a ExpandableListActivity pra facilitar). Nesse caso você pode criar um SimpleExpandableListAdapter para trabalhar com ele. Neste adapter você especifica como deve ser feito o agrupamento.

Como seria o segundo exemplo ?
eu tenho os meus dados em um arrayList , da seguinte forma:
[{“f”:“03/12/2012 16:15”,“m”:“Chegada ao local de serviço”},
{“f”:“03/12/2012 15:12”,“m”:“Inicio de Trânsito”},
{“f”:“30/11/2012 17:15”,“m”:“Inicio de Trânsito”},
{“f”:“30/11/2012 16:15”,“m”:“Inicio de Trânsito”},
{“f”:“30/11/2012 16:12”,"‘Ping Pong’"},
{“f”:“30/11/2012 16:09”,“m”:"‘Ping Pong’"},
{“f”:“30/11/2012 16:00”,“m”:“Inicio de Trânsito”},
{“f”:“27/11/2012”,“m”:“Visita”},
{“f”:“02/12/2012 13:23”,“m”:“Chegada ao local de serviço”},
{“f”:“02/12/2012 13:21”,“m”:“Inicio de Trânsito”},
{“f”:“02/12/2012 13:20”,“m”:“Fim de Trânsito”},
{“f”:“02/12/2012 08:33”,“m”:“Inicio de Trânsito”},
{“f”:“01/12/2012 17:04”,“m”:“Inicio de Trânsito”},
{“f”:“01/12/2012 15:45”,“m”:“Inicio de Trânsito”},
{“f”:“01/12/2012 11:12”,“m”:“Ping Pong”},
{“f”:“01/12/2012 11:00”,“m”:“Ping Pong”},
{“f”:“02/12/2012 12:00”,“m”:“Ping Pong”},
{“f”:“01/12/2012 10:58”,“m”:“Ping Pong”},
{“f”:“07/11/2012 16:15”,“m”:“Buraco na calçada”}] */
Então teria que criar um adpter que itere neste list e jogue ele na tela agrupando por dada

segue o que estou tentando fazer não sei se da certo

public class AtividadeArrayAdpter extends ArrayAdapter<String> {
private final Context context;
private final String[] values;
private Locale l = new Locale(“pt”,“BR”);
private DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);

  public AtividadeArrayAdpter(Context context, String[] values) {
    super(context, R.layout.newlisttarefas, values);
    this.context = context;
    this.values = values;
  }	  

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
	  
	  Calendar amanha = Calendar.getInstance(l); 	  
	  amanha.setTime(new java.util.Date());  
	  amanha.add( Calendar.DAY_OF_MONTH,1); 
	  String dfAmanha=df.format(amanha.getTime());		  
	  
	  Calendar ontem = Calendar.getInstance(l);
	  ontem.setTime(new java.util.Date());  
	  ontem.add(Calendar.DAY_OF_MONTH,-1);		  
	  String dfOntem = df.format(ontem.getTime());
	  
	  Calendar hoje = Calendar.getInstance(l);
	  hoje.setTime(new java.util.Date());  
	  String dfHoje=df.format(hoje.getTime());
	  
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.newlisttarefas, parent, false);
    TextView txtDescri = (TextView) rowView.findViewById(R.id.tvDescri);
    TextView txtTitulo = (TextView) rowView.findViewById(R.id.tvTitulo);
    
    String s = values[position];	    

Aqui comparo a data do sistema com a data que tem no arraylist e seto o titulo que seria o cabeçalho e os itens referente ao cabeçalhos.

    if (s.startsWith("f")) {
    	txtTitulo.setText("Hoje     "+dfHoje);
    	txtDescri.setText(values[position]);
    	
    }else if(s.startsWith(dfOntem)){
    	txtTitulo.setText("Ontem    "+dfOntem);
    	txtDescri.setText(values[position]);
    	
    }else if (s.startsWith(dfAmanha)) {
    	txtTitulo.setText("Amanhã     "+dfAmanha);
    	txtDescri.setText(values[position]);	    	
    }

    return rowView;
  }

}

To perdido não manjo tanto de android e tenho 9 dias pra entregar esta parada.

Dá uma olhada na documentação do SimpleExpandableListAdapter:
http://developer.android.com/reference/android/widget/SimpleExpandableListAdapter.html

Você precisa criar a lógica para agrupar, depois você passa tudo no construtor que ele cria a lista. Mas estes dados não são armazenados em um banco de dados? Seria mais fácil com o SectionCursorAdapter aí.

Pô, mas aí tu se quebra também né… sem saber android fica complicado.

Não sei avançado , mais fiz o sistema e entreguei , agora tenho outro projeto e falta somente a lista , que carrega cada item no seu devido cabeçalho , são treis cabeçalhos ,
exemplo:
Hoje
bla
bla
bla
bla
bla
bla
bla

Amanhã
bla
bla
bla
bla
bla
bla
bla

Ontem
bla
bla
bla
bla
bla
bla
bla

seria isso

Ricardo, para trazer na ordem de data fazendo em java segue abaixo o codigo.

pstm=conn.prepareStatement("select * from banco order by campoData");

Acho que não expliquei direito , pesquisando aqui no forun vi do que preciso,o que eu preciso e criar um ListView com dados agrupados.
Tenho que percorrer o meu arraylist e ver a data e agrupa-las na exibição do listView.
O listview fica assim

hoje
x
x
x
x
ontem
y
y
y
amanhã
z
z
z
z
z

tou precisando disso também :confused: