16 de novembro de 2011

Criando Adapter/File Browser - Android

Um objeto ADAPTER atua como uma ponte entre um AdapterView e os dados subjacentes para esta visão. O adapter permite o acesso aos itens e também é responsável por fazer uma exibição de cada item do conjunto de dados. Ou seja, usamos adapter's quando queremos listar algo de forma personalizada com um layout definida pelo designer ou programador.

O Android já pré-disponibiliza um adapter padrão para listagem, devemos apenas herdar nossa Activity de ListActivity e criar um ArrayAdaper para listar de forma simples mas muito eficiente alguns dados guardados em List ou Array's.

Aqui irei disponibilizar um código feito por mim para listarmos todos as pastas e arquivos do SDCARD. Iremos englobar o ADAPTER e FILE BROWSER em um código apenas!  =)

Primeiro devemos criar nosso arquivo de layout contendo um ListView dentro de um LinearLayout apenas.
Feito isso, devemos agorar criar um outro arquivo de layout que responderá por cada posição do listView, ou seja o que os itens do listView terá. Perceba que aqui é aonde criaremos como queremos nosso listView, seja com CheckBox, Spinner, TextView, ImageView, ProgressBar, (...). Fica a seu critério.
Agora vamos para a nossa Classe Java que será o ADAPTER:
Perceba que devemos criar uma classe JAVA que herde da classe BaseAdapter disponibilizada no sdk do Android. Ela pedirá que nós implementemos todos os métodos que ela possui, no caso getCount(), getItem(), getItemId() e getView(). Você deve estar se perguntando agora "Mas que diabos esses métodos fazem? =S". Muito simples, até porque o nome dos métodos já são bastante sugestivos.
Como dito acima, precisamos montar nossas VIEW's que serão mostradas no ListView.
Primeiro, devemos criar nossos atributos e o construtor da classe onde iremos instanciar nossos atributos.
Veja que iremos guardar em um List com generics de STRING (Lista apenas de String) os caminhos de todos os arquivos e pastas do SD CARD.

Já em nosso método getView() devemos montar nosso adapter! Para isto, devemos intanciar que iremos fazer um INFLATE em um arquivo xml de LAYOUT.

Agora que temos guardado nossa VIEW, ou seja, nosso ITEM. Devemos trata-lo para deixarmos como queremos. No caso, listar o nome dos arquivos/pasta do SD CARD.

Em nosso código acima, instanciamos o nosso TextView que criamos no arquivo de layout que demos um INFLATE, depois modificamos seu texto para o nome do arquivo/pasta do SD CARD e em seguida avisamos ao ListView que ele precisa dar um refresh para carregar a nova VIEW utilizando o método notifyDataSetChanged().
PRONTO, TERMINAMOS NOSSO ADAPTER... Mas ainda falta criarmos nossa Activity que irá mostar para o usuário em um ListView todos os arquivos/pastas do SD CARD, correto? =)
Pode rodar, que ele irá listar todos os arquivos do SD CARD. Pelo menos, é pra funcionar! =) Caso não funcionem, postem os erros para que eu corrija por favor!

Abraço.

2 comentários:

  1. Boa tarde colega
    ta dando 2 erros
    1
    mListaDeArquivos = new File[dir.length];
    length cannot be resolved or is not a field

    2
    mDiretorios.add(file.length());

    The method addAll(Collection) in the type List is not applicable for the arguments (long)

    ResponderExcluir
  2. Opa, o nome correto é lenght ao invés de length!

    ResponderExcluir