Exemplos de lista Android com coleções
Lista AndroidExemplos simples baseados no trabalho com coleções e na escuta de vários eventos.
ListView é um widget andróide que nos permite fazer uma lista de itens com scroll.*
O ListView é um adaptador de visualização como gridview e spinner. Isto significa que ele requer um adaptador para que possa inserir seus itens. O adaptador se torna responsável por puxar os dados de uma fonte de conteúdo.
Esta fonte pode ser um array ou algo mais complexo como banco de dados ou a partir da rede. Não apenas isso, mas o adaptador também será responsável por converter cada resultado de item em uma visão que será colocada na visualização de lista.
Isto porque como uma visualização do adaptador a ListView não conhece os detalhes, como tipo e conteúdo, das visualizações que contém. Portanto, ele solicitará as visualizações sob demanda de um adaptador ListAdapter, conforme necessário. Por exemplo, ele solicita estas vistas enquanto o usuário rola para cima ou para baixo.
Cada uma das vistas na ListView é posicionada imediatamente abaixo da vista anterior na lista.
Definição da API ListView
Aqui está a definição da API da ListView.
java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ android.widget.AdapterView<android.widget.ListAdapter>
↳ android.widget.AbsListView
↳ android.widget.ListView
Claramente você pode ver que ListView reside no pacote android.widget e deriva da classe abstrata AbsListView.
Como exibimos uma ListView?
Bem, para exibir uma ListView tudo o que você precisa é adicionar a ListView no layout XML.
<ListView
android_id="@+id/list_view"
android_layout_width="match_parent"
android_layout_height="match_parent" />
- Android:id="@+id/list_view"` - Estamos atribuindo à ListView uma identificação.
- android:layout_width="match_parent"` - Definimos a largura de nossa ListView para corresponder à do Layout no qual a ListView está sendo apresentada.
android:layout_height="match_parent"- Definimos a altura de nossa ListView para corresponder à altura do Layout no qual a ListView está sendo renderizada.
Ajustando ItemClicks para ListView simples.
Eis como vamos ouvir o itemClicks para nossa ListView, mostrando assim uma mensagem de brinde simples.
Precisamos invocar o método setOnItemClickListener() de nossa ListView e passar para ele um AdapterView.OnItemClickListener() classe anônima, e então sobrepor o método onItemClick().
Neste caso, o pos é a posição do item clicado na ListView.
myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int pos, long id) {
Toast.makeText(MainActivity.this, languages.get(i), Toast.LENGTH_SHORT).show();
}
});
Como criar um Adaptador Personalizado para ListView.
Você pode usar vários adaptadores, mas o mais comumente usado é o BaseAdapter.
private class MyCustomAdapter extends BaseAdapter {
// override other abstract methods here
@Override
public View getView(int position, View convertView, ViewGroup container) {
if (convertView == null) {
convertView = getLayoutInflater().inflate(R.layout.my_list_item, container, false);
}
((TextView) convertView.findViewById(android.R.id.nameTxt))
.setText(getItem(position));
return convertView;
}
}
Como definimos um adaptador para uma ListView?
Configuramos um adaptador para uma ListView usando o método setAdapter(). Este método é o seguinte:
public void setAdapter (ListAdapter adapter)
O método setAdapter() é responsável por vincular nossos dados à nossa ListView.
Precisamos passar um adaptador para este método. Este adaptador pode ser embalado por um WrapperListAdapter, dependendo das características ListView atualmente em uso. Por exemplo, a adição de cabeçalhos e/ou rodapés fará com que o adaptador seja embalado.
Um WrapperListAdapter é um adaptador de lista que embrulha outro adaptador de lista.
| --- |
|---|
Quais atributos XML são definidos na classe ListView?
A maioria dos atributos XML que você usará são definidos nas classes pai como AbsListView, que também herda de outras classes base como ViewGroup e View.
No entanto, a 'ListView' também tem os seguintes atributos definidos:
| --- |
|---|
Com quais tipos de Adaptadores o ListView pode ser utilizado?
Aqui estão alguns dos adaptadores que podem ser usados com a ListView:
| --- |
|---|
Exemplo simples de ListView
Vamos ver um simples exemplo ListView que irá lidar com a exibição de uma lista de linguagens de programação.
Quando o usuário clica em um único item, o idioma clicado é mostrado em uma mensagem de Brinde.
Exemplo 1: Vista de Lista do Android - Preencher com Array
Este é um simples tutorial ListView. Aqui está o que fazemos:
- Preencha ListView com dados de uma matriz simples.
- Usamos o ArrayAdapter.
- Manusear ItemClicks.* Demonstração do Android ListView Array #### Nossa PrincipalAtividade
Esta é nossa principal atividade. Esta é a nossa atividade de lançamento. Esta classe será o ponto de entrada para nossa aplicação.
Primeiro definimos nosso pacote e depois importamos outros pacotes através das declarações de "importação".
Depois, fazemos nossa classe derivar da AppCompatActivity.
Manteremos um array que atuará como nossa fonte de dados:
String[] spacecrafts={"Juno","Hubble","Casini","WMAP","Spitzer","Pioneer","Columbia","Challenger","Apollo","Curiosity"};
Passaremos esta matriz para nosso construtor de arrayadapetr e daremos sua instância à nossa ListView:
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,spacecrafts);
lv.setAdapter(adapter);
Vejamos o código fonte completo.
public class MainActivity extends AppCompatActivity {
ListView lv;
String[] spacecrafts={"Juno","Hubble","Casini","WMAP","Spitzer","Pioneer","Columbia","Challenger","Apollo","Curiosity"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv= (ListView) findViewById(R.id.lv);
//ADAPTER
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,spacecrafts);
lv.setAdapter(adapter);
//LISTENER
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(MainActivity.this, spacecrafts[i], Toast.LENGTH_SHORT).show();
}
});
}
}
Nosso layout XML
Este é o layout de nossa principal atividade. É o nosso arquivo activity_main.xml.
Nós utilizamos os seguintes elementos:
- RelativeLayout - Nosso ViewGroup.
- ListView - Nossa visão do adaptador.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android_layout_width="match_parent"
android_layout_height="match_parent"
android_paddingBottom="@dimen/activity_vertical_margin"
android_paddingLeft="@dimen/activity_horizontal_margin"
android_paddingRight="@dimen/activity_horizontal_margin"
android_paddingTop="@dimen/activity_vertical_margin"
tools_context="com.tutorials.hp.listviewarray.MainActivity">
<ListView
android_id="@+id/lv"
android_layout_width="match_parent"
android_layout_height="wrap_content"
/>
</RelativeLayout>
Como Funcionar
- Faça o download do projeto.
- Você receberá um arquivo zipado, extraia-o.
- Abra o Estúdio Android.
- Agora feche, projeto já aberto.
- Na barra de menu, clique em Arquivo >Novo> Importar Projeto.
- Agora escolha uma pasta de destino, de onde você quer importar o projeto.
- Escolha um Projeto Android.
- Agora clique em "OK".
- Feito, você acabou de importar o projeto, agora edite-o.
Mais recursos
| --- |
|---|
Exemplo 2: Como povoar a lista Visualizar a partir de uma ArrayList
Este é um simples tutorial ListView. Aqui está o que fazemos:
- Preencher ListView com dados de uma simples ArrayList.
- Nós usamos o ArrayAdapter.
- Manusear ItemClicks.
Nossa PrincipalAtividade
Esta é nossa classe MainActivity.
public class MainActivity extends AppCompatActivity {
ArrayList<String> numbers=new ArrayList<>();
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
//FILL DATA
fillData();
//ADAPTER
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, numbers);
lv.setAdapter(adapter);
//LISTENER
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(MainActivity.this, numbers.get(i), Toast.LENGTH_SHORT).show();
}
});
}
//FILL DATA
private void fillData()
{
for (int i=0;i<10;i++)
{
numbers.add("Number "+String.valueOf(i));
}
}
}
Nosso layout XML
O layout de nossa atividade está aqui.
Bom dia.
## Exemplo 2: Lista simples AndroidView OnItemClick
Este é um exemplo simples de como preencher um [listview](/android/listview) com um arrailista de cordas e lidar com nosso item ListViewClicks.
### Exemplo
###### MainActivity.java
Esta é nossa principal atividade.
Primeiro especificamos o nome do pacote, depois adicionamos nossas declarações de importação.
Em seguida, criamos nossa classe MainActivity, fazendo-a derivar de AppCompatActivity.
Manteremos um arraylist simples como um campo de instância, isto manterá nossos dados que apresentaremos em nossa [listview](/android/listview).
Estaremos usando o ArrayAdapter como nosso adaptador.
Eis como seremos se
<!-- 12 -->
```java
###### activity_main.xml
Aqui está o layout de nossa principal atividade. Chamamos isso de activity_main.xml.
Utilizamos os seguintes elementos:
1. [RelativeLayout](/android/relativelayout) - Nosso ViewGroup.
2. [ListView](/android/listview) - Nossa visão do adaptador.
A ListView estará renderizando nossos dados.
<!-- 13 -->
```xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android_layout_width="match_parent"
android_layout_height="match_parent"
android_paddingBottom="@dimen/activity_vertical_margin"
android_paddingLeft="@dimen/activity_horizontal_margin"
android_paddingRight="@dimen/activity_horizontal_margin"
android_paddingTop="@dimen/activity_vertical_margin"
tools_context="com.tutorials.hp.simplelistview.MainActivity">
<ListView
android_id="@+id/lv"
android_layout_width="match_parent"
android_layout_height="wrap_content"
/>
</RelativeLayout>
SEÇÃO 2 : Código fonte
Baixe o código do soure abaixo.
| --- |
|---|
Exemplo 3: Como fazer uma listaVista a partir de uma lista de objetos POJO
Como preencher uma simples ListView com uma java List de POJOs.*
Neste tutorial vemos como preencher uma simples visualização de lista com objetos "Pessoa". Quando clicamos mostramos o nome da Pessoa em uma mensagem de Brinde.
Conceitos que você aprenderá com este exemplo
- O que é uma ListView?
- O que é uma coleção ListView?
- Como preencher uma ListView a partir de uma List de POJO Objetos estrutura de dados em android studio.
- Como fazer um simples clique em um ouvinte em uma lista de visualização.
- O que é um adaptador ArrayAdapter?
- Como usar o ArrayAdapter para vincular uma lista java a uma simples visualização de lista.
**Como definir ListView em XML Layout***
Você utiliza o objeto ListView como o elemento:
<ListView
android_id="@+id/lv"
android_layout_width="match_parent"
android_layout_height="wrap_content"
/>
**Como fazer referência a uma listaVer em código Java***
Veja aqui como você faz referência a uma ListView. Você utiliza o método findViewById():
ListView lv= (ListView) findViewById(R.id.lv);
**(a). Inicialização de uma lista Java***
Veja aqui como você pode inicializar uma Lista. Você não pode instanciar diretamente, pois, como dissemos, é uma interface:
List<String> people=new ArrayList<>();
**(b). Como limpar uma lista Java***
Você pode remover todos os itens de uma lista java utilizando o método clear():
people.clear();
**(c). População de uma lista Java com Objetos***
Você pode preencher uma lista java utilizando o método add():
private void fillPeople()
{
Person p=new Person();
p.setName("Mike");
people.add(p.getName());
p=new Person();
p.setName("John");
people.add(p.getName());
.....
Leia mais sobre a lista java aqui.
O que é um adaptador ArrayAdapter?
Precisamos de um adaptador para trabalhar com uma visualização de lista.
Um adaptador é uma classe que atua como uma ponte entre uma visualização do adaptador e a fonte de dados subjacente.
Neste caso, usaremos um ArrayAdapter.
Você pode ler mais sobre o ArrayAdapter aqui.
1. Demonstração do projeto
Aqui está a demonstração do exemplo:
2. Estúdio Android e Projeto Ceation
(a). O que é o Android Studio?
Usaremos o Android Studio, a IDE oficial para o desenvolvimento de andróides. O Estúdio Android é mantido tanto pelo Google quanto pelo Jetbrains.
O Android Studio vem com o Android SDK Manager, que é uma ferramenta que nos permite baixar os componentes do Android SDK necessários para desenvolver aplicações androides.
Para saber mais sobre o Android Studio vá aqui.
(b). Como criar uma atividade vazia no Android Studio
- Primeiro, criar um projeto vazio no estúdio andróide. Vá para File -> New Project (Arquivo -> Novo Projeto).
- Digite o nome do aplicativo e escolha o nome da empresa.
- Escolha o SDK mínimo.
- Escolher atividade vazia.
- Clique em Finish.
Isto irá gerar para nós um projeto com o seguinte:
| --- |
|---|
Para saber mais sobre como criar um projeto andróide no estúdio andróide, vá até aqui.
(c). Estrutura de Projeto Gerado no Android Stduo
O Android Studio irá gerar para você um projeto com configurações padrão através de um conjunto de arquivos e diretórios.
2. Recursos.
A plataforma Android oferece uma maneira poderosa e flexível de adicionar conteúdo estático como um recurso.
Este conteúdo estático também será empacotado no arquivo APK. O conteúdo estático será armazenado como um recurso ou como um ativo.
Os recursos pertencem a um determinado tipo. Estes tipos podem ser:
- Desenhos.
- Layout.
- Valor.
Comecemos analisando os recursos de layout
(a). activity_main.xml
Este layout será inflado na interface do usuário da atividade principal. Isto acontecerá através do método 'SetContentView()setContentView() da Activity, que exigirá que passemos a ele o layout.
Faremos isso dentro do método onCreate() de Activity.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android_layout_width="match_parent"
android_layout_height="match_parent"
android_paddingBottom="@dimen/activity_vertical_margin"
android_paddingLeft="@dimen/activity_horizontal_margin"
android_paddingRight="@dimen/activity_horizontal_margin"
android_paddingTop="@dimen/activity_vertical_margin"
tools_context="com.tutorials.hp.listviewandobjects.MainActivity">
<ListView
android_id="@+id/lv"
android_layout_width="match_parent"
android_layout_height="wrap_content"
/>
</RelativeLayout>
3. Código Java.
Os aplicativos Android podem ser escritos principalmente em Java ou Kotlin. Atualmente, porém, existem muitos frameworks como Flutter, que também usam linguagens como Dart.
Nesta classe estamos usando a linguagem de programação Java.
Teremos estas classes em nosso projeto.
(a). Person.java
Este é nosso objeto de dados. Esta classe representará uma única pessoa.
Uma única pessoa terá estas propriedades:
id- um Inteiro. A identificação da pessoa.- "nome" - O nome da pessoa. Uma corda.
Em seguida, nossa lista incluirá 'Pessoa' objetos.
public class Person {
int id;
String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
(b). MainActivity.java
Esta é nossa atividade de lançamento, como o próprio nome sugere. Isto significa que será o principal ponto de entrada para nosso aplicativo, pois quando o usuário clica no ícone de nosso aplicativo, esta atividade será apresentada primeiro.
Substituímos um método chamado onCreate(). Aqui começaremos por inflar nosso layout principal através do método setContentView().
Nossa atividade principal é na verdade uma atividade uma vez que é derivada da AppCompatActivity.
public class MainActivity extends AppCompatActivity {
List<String> people=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//LISTVIEW
ListView lv= (ListView) findViewById(R.id.lv);
//FILL LIST
fillPeople();
//ADAPTER
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,people);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(MainActivity.this, people.get(i), Toast.LENGTH_SHORT).show();
}
});
}
private void fillPeople()
{
people.clear();
Person p=new Person();
p.setName("Mike");
people.add(p.getName());
p=new Person();
p.setName("John");
people.add(p.getName());
p=new Person();
p.setName("Lucy");
people.add(p.getName());
p=new Person();
p.setName("Rebecca");
people.add(p.getName());
p=new Person();
p.setName("Kris");
people.add(p.getName());
p=new Person();
p.setName("Kurt");
people.add(p.getName());
p=new Person();
p.setName("Vin");
people.add(p.getName());
}
}
4. Download
Tudo está na referência do código fonte. Ele é bem comentado e fácil de entender e pode ser baixado abaixo.
Verifique também nosso vídeo tutorial, que é mais detalhado e explicado passo a passo.
| --- |
|---|
Exemplo 4: ListView - Como ouvir eventos LongClick
Este é um tutorial andróide para explorar como lidar com eventos de clique longo em uma visualização de lista personalizada com imagens e texto.
Vamos lá.
1. Criar Projeto de Atividades Básicas
- Primeiro, criar um novo projeto no estúdio andróide. Vá para File -> New Project (Arquivo -> Novo Projeto).
- Digite o nome do aplicativo e escolha o nome da empresa.

- Escolha o SDK mínimo.

- Escolha a atividade Básica.

- Clique em Finish.

A atividade básica terá uma barra de ferramentas e um botão de ação flutuante já adicionados no layout
2. Dependências
Realmente não temos dependências externas. Em vez disso, simplesmente especificamos um par de dependências da biblioteca de apoio.
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
testImplementation 'junit:junit:4.12'
implementation `com.android.support:appcompat-v7:23.2.1'
implementation `com.android.support:design:23.2.1'
implementation `com.android.support:cardview-v7:23.2.1'
}
3. Criar interface de usuário
As interfaces de usuário são normalmente criadas em andróides usando layouts XML, em oposição à codificação direta em java.
(a). activity_main.xml
- Este layout é inflado para a interface do usuário MainActivity.
- Ele inclui o content_main.xml.
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
android_layout_width="match_parent"
android_layout_height="match_parent"
android_fitsSystemWindows="true"
tools_context="com.tutorials.hp.listviewlongclick.MainActivity">
<android.support.design.widget.AppBarLayout
android_layout_width="match_parent"
android_layout_height="wrap_content"
android_theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android_id="@+id/toolbar"
android_layout_width="match_parent"
android_layout_height="?attr/actionBarSize"
android_background="?attr/colorPrimary"
app_popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
<android.support.design.widget.FloatingActionButton
android_id="@+id/fab"
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_layout_gravity="bottom|end"
android_layout_margin="@dimen/fab_margin"
android_src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
(b). content_main.xml
Acrescentemos aqui nossa ListView.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android_layout_width="match_parent"
android_layout_height="match_parent"
android_paddingBottom="@dimen/activity_vertical_margin"
android_paddingLeft="@dimen/activity_horizontal_margin"
android_paddingRight="@dimen/activity_horizontal_margin"
android_paddingTop="@dimen/activity_vertical_margin"
app_layout_behavior="@string/appbar_scrolling_view_behavior"
tools_context="com.tutorials.hp.listviewlongclick.MainActivity"
tools_showIn="@layout/activity_main">
<ListView
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_id="@+id/lv"
android_layout_alignParentLeft="true"
android_layout_alignParentStart="true" />
</RelativeLayout>
(c). model.xml
Este layout definirá o modelo de linha personalizado para nossa ListView.
Neste caso, nossa ListView terá imagens e textos.
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
android_orientation="horizontal" android_layout_width="match_parent"
android_layout_margin="10dp"
card_view_cardCornerRadius="10dp"
card_view_cardElevation="10dp"
android_layout_height="wrap_content">
<RelativeLayout
android_layout_width="match_parent"
android_layout_height="match_parent">
<ImageView
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_id="@+id/movieImage"
android_padding="10dp"
android_src="@drawable/ghost" />
<TextView
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_textAppearance="?android:attr/textAppearanceLarge"
android_text="Name"
android_id="@+id/nameTxt"
android_padding="10dp"
android_textColor="@color/colorAccent"
android_layout_below="@+id/movieImage"
android_layout_alignParentLeft="true"
/>
<TextView
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_textAppearance="?android:attr/textAppearanceLarge"
android_text=" John Doe a former FBI Agent and now Physics teacher .is wrongly accussed of murdering an innocent child.He makes it his business to find the bad guys who did taht.He convinces hacker Aram to join him.....
"
android_id="@+id/descTxt"
android_padding="10dp"
android_layout_below="@+id/nameTxt"
android_layout_alignParentLeft="true"
/>
<TextView
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_textAppearance="?android:attr/textAppearanceMedium"
android_text="TV Show"
android_id="@+id/posTxt"
android_padding="10dp"
android_layout_below="@+id/movieImage"
android_layout_alignParentRight="true" />
<CheckBox
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_id="@+id/chk"
android_layout_alignParentRight="true"
/>
</RelativeLayout>
</android.support.v7.widget.CardView>
Passemos agora às nossas classes Java:
4. Movie.java
Nosso objeto de dados. Representará um único filme.
package com.tutorials.hp.listviewlongclick;
public class Movie {
private String name;
private int image;
public Movie(String name, int image) {
this.name = name;
this.image = image;
}
public String getName() {
return name;
}
public int getImage() {
return image;
}
}
5. ItemLongClickListener.java
Nossa longa interface de ouvinte de clique.
public interface ItemLongClickListener {
void onLongItemClick(View v);
}
6. MyViewHolder.java
Segurará nossos widgets para serem reciclados.
public class MyViewHolder implements View.OnLongClickListener {
ImageView img;
TextView nameTxt;
ItemLongClickListener itemLongClickListener;
public MyViewHolder(View v) {
img= (ImageView) v.findViewById(R.id.movieImage);
nameTxt= (TextView) v.findViewById(R.id.nameTxt);
v.setOnLongClickListener(this);
}
public void setItemLongClickListener(ItemLongClickListener ic)
{
this.itemLongClickListener=ic;
}
@Override
public boolean onLongClick(View v) {
this.itemLongClickListener.onLongItemClick(v);
return false;
}
}
7. CustomAdapter.java
Irá inflar nosso modelo.xml e vincular os dados aos pontos de vista resultantes.
public class CustomAdapter extends BaseAdapter {
Context c;
ArrayList<Movie> movies;
LayoutInflater inflater;
public CustomAdapter(Context c, ArrayList<Movie> movies) {
this.c = c;
this.movies = movies;
}
@Override
public int getCount() {
return movies.size();
}
@Override
public Object getItem(int position) {
return movies.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
//SHALL RETURN A ROW
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if(inflater==null)
{
inflater= (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
//CONVERT FROM XML TO JAVA
if(convertView==null)
{
convertView=inflater.inflate(R.layout.model,parent,false);
}
//BIND DATA TO VIEWS
MyViewHolder holder=new MyViewHolder(convertView);
holder.nameTxt.setText(movies.get(position).getName());
holder.img.setImageResource(movies.get(position).getImage());
holder.setItemLongClickListener(new ItemLongClickListener() {
@Override
public void onLongItemClick(View v) {
Toast.makeText(c,movies.get(position).getName(),Toast.LENGTH_SHORT).show();
}
});
return convertView;
}
}
8. MainActivity.java
Nossa principal atividade.
public class MainActivity extends AppCompatActivity {
ListView lv;
CustomAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
lv= (ListView) findViewById(R.id.lv);
adapter=new CustomAdapter(this,getMovies());
//SET ADAPTER
lv.setAdapter(adapter);
}
private ArrayList<Movie> getMovies() {
//COLECTION OF CRIME MOVIES
ArrayList<Movie> movies=new ArrayList<>();
Movie movie=new Movie("Shuttle Carrier",R.drawable.shuttlecarrier);
//ADD ITR TO COLLECTION
movies.add(movie);
movie=new Movie("Fruts",R.drawable.fruits);
movies.add(movie);
movie=new Movie("Breaking Bad",R.drawable.breaking);
movies.add(movie);
movie=new Movie("Crisis",R.drawable.crisis);
movies.add(movie);
movie=new Movie("Ghost Rider",R.drawable.rider);
movies.add(movie);
movie=new Movie("Star Wars",R.drawable.starwars);
movies.add(movie);
movie=new Movie("BlackList",R.drawable.red);
movies.add(movie);
movie=new Movie("Men In Black",R.drawable.meninblack);
movies.add(movie);
movie=new Movie("Game Of Thrones",R.drawable.thrones);
movies.add(movie);
return movies;
}
}
Baixar Código
| --- |
|---|
Exemplo 4: Android Custom ListView Master Detail [Abrir nova atividade]
**Olá pessoal. Hoje discutimos sobre a interface do Android Custom ListView Master Detail.
Nossa ListView deve ter imagens e textos.
SEÇÃO 1 : Nossa PrincipalAtividade
Esta é nossa principal atividade.
É a nossa visão de mestre.
A visão mestre exibirá uma ListView com objetos Player.
public class MainActivity extends Activity {
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView) findViewById(R.id.listView1);
//ADAPTER
CustomAdapter adapter=new CustomAdapter(this);
lv.setAdapter(adapter);
//EVENTS
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View v, int pos,
long id) {
// TODO Auto-generated method stub
Intent i=new Intent(getApplicationContext(), PlayerActivity.class);
//PASS INDEX OR POS
i.putExtra("Position", pos);
startActivity(i);
}
});
}
SEÇÃO 2 : Nosso DetalheAtividade
Este é o nosso detalhe atividade.
Esta classe exibirá os detalhes de um objeto de um único jogador.
public class PlayerActivity extends Activity {
int pos=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_player);
//GET PASSED DATA
Intent i=getIntent();
pos=i.getExtras().getInt("Position");
//GET VIEWS
final CustomAdapter adapter=new CustomAdapter(this);
final ImageView img=(ImageView) findViewById(R.id.imageView1);
final TextView nameTv=(TextView)findViewById(R.id.nameTxt);
final TextView goalTv=(TextView) findViewById(R.id.goalTxt);
//SET DATA
img.setImageResource(adapter.images[pos]);
nameTv.setText(adapter.names[pos]);
goalTv.setText(adapter.goals[pos]);
Button nextBtn=(Button) findViewById(R.id.button1);
//NEXT CLICKED
nextBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
int position=pos+1;
//set data
img.setImageResource(adapter.images[position]);
nameTv.setText("Name: "+adapter.names[position]);
goalTv.setText("Goals: "+adapter.goals[position]);
if(!(position>=adapter.getCount()-1))
{
pos +=1;
}else
{
pos = -1;
}
}
});
}
}
SEÇÃO 3 : Nosso Adaptador Personalizado:
Esta é nossa classe de adaptadores.
Esta classe derivará da classe android.widget.BaseAdapter.
Como um adaptador, ele será responsável por primeiro inflar nosso model.xml em um objeto de visualização. Em seguida, ele ligará os dados a essa visão inflada.
Também escutaremos os eventos de clique para essa visualização e então abriremos o detalhe atividade.
public class CustomAdapter extends BaseAdapter {
private Context c;
String[] names={"Michael Carrick","Diego Costa","Ander Herera","Juan Mata","Oscar","Aaron Ramsey","Wayne Rooney","Alexis Sanchez","Van Persie"};
String[] goals={"3","25","9","11","9","11","14","18","13"};
int[] images={R.drawable.carrick,R.drawable.costa,R.drawable.herera,R.drawable.mata,R.drawable.oscar,R.drawable.ramsey,R.drawable.rooney,R.drawable.sanchez,R.drawable.vanpersie};
; public CustomAdapter(Context ctx) {
// TODO Auto-generated constructor stub
this.c=ctx;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return names.length;
}
@Override
public Object getItem(int pos) {
// TODO Auto-generated method stub
return names[pos];
}
@Override
public long getItemId(int pos) {
// TODO Auto-generated method stub
return pos;
}
@Override
public View getView(int pos, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if(convertView==null)
{
LayoutInflater inflater=(LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView=inflater.inflate(R.layout.player, null);
}
//GET VIEWS
TextView nameTxt=(TextView) convertView.findViewById(R.id.nameTv);
TextView goalsTxt=(TextView) convertView.findViewById(R.id.goalsTv);
ImageView img=(ImageView) convertView.findViewById(R.id.imageView1);
//SET DATA
nameTxt.setText(names[pos]);
goalsTxt.setText(goals[pos]);
img.setImageResource(images[pos]);
return convertView;
}
}
SEÇÃO 4 : Nosso Layout de MainActivity
Este layout será inflado na IU para nossa atividade principal.
Este layout conterá uma ListView.
<RelativeLayout
android_layout_width="match_parent"
android_layout_height="match_parent"
android_paddingBottom="@dimen/activity_vertical_margin"
android_paddingLeft="@dimen/activity_horizontal_margin"
android_paddingRight="@dimen/activity_horizontal_margin"
android_paddingTop="@dimen/activity_vertical_margin"
tools_context=".MainActivity" >
<ListView
android_id="@+id/listView1"
android_layout_width="match_parent"
android_layout_height="wrap_content"
android_layout_alignParentLeft="true"
android_layout_alignParentTop="true" >
</ListView>
</RelativeLayout>
SEÇÃO 5 : Nosso Layout DetalhamentoAtividade
Este é nosso layout atividade detalhado. Ele conterá uma visualização de imagem, visualização de texto e botão.
<RelativeLayout
android_layout_width="match_parent"
android_layout_height="match_parent"
android_paddingBottom="@dimen/activity_vertical_margin"
android_paddingLeft="@dimen/activity_horizontal_margin"
android_paddingRight="@dimen/activity_horizontal_margin"
android_paddingTop="@dimen/activity_vertical_margin"
tools_context=".PlayerActivity" >
<ImageView
android_id="@+id/imageView1"
android_layout_width="190dp"
android_layout_height="275dp"
android_layout_alignParentTop="true"
android_scaleType="fitCenter"
android_src="@drawable/carrick" />
<Button
android_id="@+id/button1"
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_layout_alignParentBottom="true"
android_layout_alignParentRight="true"
android_text="Next" />
<TextView
android_id="@+id/goalTxt"
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_layout_alignParentLeft="true"
android_layout_below="@+id/nameTxt"
android_layout_marginTop="24dp"
android_text="Goals : "
android_textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android_id="@+id/textView1"
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_layout_alignParentLeft="true"
android_layout_below="@+id/imageView1"
android_text="PLAYER PROFILE"
android_textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android_id="@+id/nameTxt"
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_layout_alignParentLeft="true"
android_layout_below="@+id/textView1"
android_layout_marginTop="17dp"
android_text="Name"
android_textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>
SEÇÃO 6: Nosso Layout do Modelo de Fileira
Este é nosso modelo personalizado de linha de visualização de lista.
Ele define como cada linha de visualização de lista irá aparecer.
Neste caso, temos uma visualização de imagem e duas visualizações de texto.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android_layout_width="match_parent"
android_layout_height="match_parent"
android_orientation="horizontal" >
<TextView
android_id="@+id/nameTv"
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_layout_alignParentTop="true"
android_layout_marginLeft="28dp"
android_layout_toRightOf="@+id/imageView1"
android_text="Name"
android_textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android_id="@+id/goalsTv"
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_layout_alignBottom="@+id/imageView1"
android_layout_alignLeft="@+id/nameTv"
android_layout_marginBottom="16dp"
android_text="Goals"
android_textAppearance="?android:attr/textAppearanceSmall" />
<ImageView
android_id="@+id/imageView1"
android_layout_width="65dp"
android_layout_height="71dp"
android_layout_alignParentLeft="true"
android_layout_alignParentTop="true"
android_layout_marginLeft="26dp"
android_padding="10dp"
android_src="@drawable/herera" />
</RelativeLayout>
SEÇÃO 7 : Nosso Manifesto
Este é nosso andróide mainfest. Basta assegurar que ambas as nossas duas atividades estejam registradas.
<?xml version="1.0" encoding="utf-8"?>
<manifest
package="com.example.listviewmasterdetail"
android_versionCode="1"
android_versionName="1.0" >
<uses-sdk
android_minSdkVersion="19"
android_targetSdkVersion="19" />
<application
android_allowBackup="true"
android_icon="@drawable/ic_launcher"
android_label="@string/app_name"
android_theme="@style/AppTheme" >
<activity
android_name="com.example.listviewmasterdetail.MainActivity"
android_label="@string/app_name" >
<intent-filter>
<action android_name="android.intent.action.MAIN" />
<category android_name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android_name="com.example.listviewmasterdetail.PlayerActivity"
android_label="@string/title_activity_player" >
</activity>
</application>
</manifest>
Exemplo 5: Android ListView - CRUD - ADD UPDATE DELETE.
Olá. Vemos como realizar operações básicas de CRUD contra um arraylist e uma ListView.
- Adicionar Atualização e Excluir contra uma ArrayList e uma ListView.
- Nós trabalhamos com o ArrayAdapter.
- Lidamos com ItemClicks e dados de entrada a partir de um diálogo. Android ListView CRUD #### 1. Build.Gradle App Level
- Adicionar dependências para bibliotecas de suporte AppCompat e Design.
- Nossa MainActivity deve derivar da AppCompatActivity enquanto também devemos usar o botão de ação flutuante das bibliotecas de suporte ao design.
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "24.0.1"
defaultConfig {
applicationId "com.tutorials.hp.listview_crud"
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
testImplementation 'junit:junit:4.12'
implementation `com.android.support:appcompat-v7:24.1.1'
implementation `com.android.support:design:24.1.1'
}
2. CRUD.java
- Adicionar Atualizar Excluir dados. Responsável por realizar operações CRUD.
public class CRUD {
private ArrayList<String> names =new ArrayList<>();
public void save(String name)
{
names.add(name);
}
public ArrayList<String> getNames()
{
return names;
}
public Boolean update(int position,String newName)
{
try {
names.remove(position);
names.add(position,newName);
return true;
}catch (Exception e)
{
e.printStackTrace();
return false;
}
}
public Boolean delete(int position)
{
try {
names.remove(position);
return true;
}catch (Exception e)
{
e.printStackTrace();
return false;
}
}
}
3. MainActivity.java
- Atividade do lançador.
- ActivityMain.xml inflado como a visão de conteúdo para esta atividade.
- Consulte nossa ListView.
public class MainActivity extends AppCompatActivity {
ListView lv;
ArrayAdapter<String> adapter;
CRUD crud=new CRUD();
Dialog d;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
lv= (ListView) findViewById(R.id.lv);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
if(d != null) {
if(!d.isShowing())
{
displayInputDialog(i);
}else
{
d.dismiss();
}
}
}
});
final FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
displayInputDialog(-1);
}
});
}
private void displayInputDialog(final int pos)
{
d=new Dialog(this);
d.setTitle("LISTVIEW CRUD");
d.setContentView(R.layout.input_dialog);
final EditText nameEditTxt= (EditText) d.findViewById(R.id.nameEditText);
Button addBtn= (Button) d.findViewById(R.id.addBtn);
Button updateBtn= (Button) d.findViewById(R.id.updateBtn);
Button deleteBtn= (Button) d.findViewById(R.id.deleteBtn);
if(pos== -1)
{
addBtn.setEnabled(true);
updateBtn.setEnabled(false);
deleteBtn.setEnabled(false);
}else
{
addBtn.setEnabled(true);
updateBtn.setEnabled(true);
deleteBtn.setEnabled(true);
nameEditTxt.setText(crud.getNames().get(pos));
}
addBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//GET DATA
String name=nameEditTxt.getText().toString();
//VALIDATE
if(name.length()>0 && name != null)
{
//save
crud.save(name);
nameEditTxt.setText("");
adapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,crud.getNames());
lv.setAdapter(adapter);
}else
{
Toast.makeText(MainActivity.this, "Name cannot be empty", Toast.LENGTH_SHORT).show();
}
}
});
updateBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//GET DATA
String newName=nameEditTxt.getText().toString();
//VALIDATE
if(newName.length()>0 && newName != null)
{
//save
if(crud.update(pos,newName))
{
nameEditTxt.setText(newName);
adapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,crud.getNames());
lv.setAdapter(adapter);
}
}else
{
Toast.makeText(MainActivity.this, "Name cannot be empty", Toast.LENGTH_SHORT).show();
}
}
});
deleteBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//DELETE
if( crud.delete(pos))
{
nameEditTxt.setText("");
adapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,crud.getNames());
lv.setAdapter(adapter);
}
}
});
d.show();
}
}
4. ActivityMain.xml
- Para conter nosso ContentMain.xml.
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
android_layout_width="match_parent"
android_layout_height="match_parent"
android_fitsSystemWindows="true"
tools_context="com.tutorials.hp.listview_crud.MainActivity">
<android.support.design.widget.AppBarLayout
android_layout_width="match_parent"
android_layout_height="wrap_content"
android_theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android_id="@+id/toolbar"
android_layout_width="match_parent"
android_layout_height="?attr/actionBarSize"
android_background="?attr/colorPrimary"
app_popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
<android.support.design.widget.FloatingActionButton
android_id="@+id/fab"
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_layout_gravity="bottom|end"
android_layout_margin="@dimen/fab_margin"
android_src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
5. ContentMain.xml
- Para realizar nossa ListView.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android_layout_width="match_parent"
android_layout_height="match_parent"
android_paddingBottom="@dimen/activity_vertical_margin"
android_paddingLeft="@dimen/activity_horizontal_margin"
android_paddingRight="@dimen/activity_horizontal_margin"
android_paddingTop="@dimen/activity_vertical_margin"
app_layout_behavior="@string/appbar_scrolling_view_behavior"
tools_context="com.tutorials.hp.listview_crud.MainActivity"
tools_showIn="@layout/activity_main">
<ListView
android_id="@+id/lv"
android_layout_width="match_parent"
android_layout_height="wrap_content"
/>
</RelativeLayout>
6. inputdialog.xml
- manuseia as entradas.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android_orientation="vertical" android_layout_width="match_parent"
android_layout_height="match_parent">
<LinearLayout
android_layout_width="fill_parent"
android_layout_height="match_parent"
android_layout_marginTop="?attr/actionBarSize"
android_orientation="vertical"
android_paddingLeft="15dp"
android_paddingRight="15dp"
android_paddingTop="10dp">
<android.support.design.widget.TextInputLayout
android_id="@+id/nameLayout"
android_layout_width="match_parent"
android_layout_height="wrap_content">
<EditText
android_id="@+id/nameEditText"
android_layout_width="match_parent"
android_layout_height="wrap_content"
android_singleLine="true"
android_hint= "Name" />
</android.support.design.widget.TextInputLayout>
<LinearLayout
android_orientation="horizontal"
android_layout_width="match_parent"
android_layout_height="wrap_content">
<Button android_id="@+id/addBtn"
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_text="ADD"
android_clickable="true"
android_background="@color/colorAccent"
android_layout_marginTop="20dp"
android_textColor="@android:color/white"/>
<Button android_id="@+id/updateBtn"
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_text="UPDATE"
android_clickable="true"
android_background="#009968"
android_layout_marginTop="20dp"
android_textColor="@android:color/white"/>
<Button android_id="@+id/deleteBtn"
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_text="DELETE"
android_clickable="true"
android_background="#2fc1b9"
android_layout_marginTop="20dp"
android_textColor="@android:color/white"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
Como Funcionar
- Faça o download do projeto.
- Você receberá um arquivo zipado, extraia-o.
- Abra o Estúdio Android.
- Agora feche, projeto já aberto.
- Na barra de menu, clique em Arquivo >Novo> Importar Projeto.
- Agora escolha uma pasta de destino, de onde você quer importar o projeto.
- Escolha um Projeto Android.
- Agora clique em "OK".
- Feito, você acabou de importar o projeto, agora edite-o.
Mais recursos
| --- |
|---|
Bom dia.
Exemplo: Android ListView - ContextoMenu
Android Custom ListView com Imagens Texto e ContextMenu tutorial.
O ListView terá uma Lista de itens. O usuário pode então clicar com o botão direito do mouse em um determinado item e um menu de contexto será exibido.
Conceitos que você aprenderá com este exemplo
- O que é uma ListView?
- O que é um MenuDeContexto?
- Como criar uma visualização de lista personalizada com imagens, texto e menu de contexto em android studio.
- Como implementar um ouvinte de clique longo em uma visualização de lista.
- Como mostrar o menu de contexto com itens de menu quando uma visualização de lista é clicada com o botão direito do mouse.
- Como criar um adaptador personalizado com baseadaptador.
O que é BaseAdapter?
Precisamos de um adaptador para trabalhar com uma visualização de lista.
Um adaptador é uma classe que atua como uma ponte entre uma visualização de adaptador e a fonte de dados subjacente.
Neste caso, usaremos o BaseAdapter.
1. Arquivos de Gradle
Primeiro adicionamos as dependências no arquivo build.gradle de nível de aplicação.
(a). Build.gradle
Vamos acrescentar algumas dependências. Nossa ListView compreenderá visualizações de cartões:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.tutorials.hp.listviewcontextmenu"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
testImplementation 'junit:junit:4.12'
implementation `com.android.support:appcompat-v7:23.2.1'
implementation `com.android.support:design:23.2.1'
implementation `com.android.support:cardview-v7:23.2.1'
}
2. Arquivos de layout
Vamos ver nossos arquivos de layout. Teremos três deles:
- activity_main.xml
- content_main.xml
- modelo.xml
(a). activity_main.xml
- Nosso modelo de layout para a atividade principal.
- Ele será inflado à vista para a atividade principal.
- Ele conterá o conteúdo_main.xml.
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
android_layout_width="match_parent"
android_layout_height="match_parent"
android_fitsSystemWindows="true"
tools_context="com.tutorials.hp.listviewcontextmenu.MainActivity">
<android.support.design.widget.AppBarLayout
android_layout_width="match_parent"
android_layout_height="wrap_content"
android_theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android_id="@+id/toolbar"
android_layout_width="match_parent"
android_layout_height="?attr/actionBarSize"
android_background="?attr/colorPrimary"
app_popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
<android.support.design.widget.FloatingActionButton
android_id="@+id/fab"
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_layout_gravity="bottom|end"
android_layout_margin="@dimen/fab_margin"
android_src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
(b). content_main.xml
- Isto irá manter nossa ListView.
- Será incluída dentro da
atividade_main.xml.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android_layout_width="match_parent"
android_layout_height="match_parent"
android_paddingBottom="@dimen/activity_vertical_margin"
android_paddingLeft="@dimen/activity_horizontal_margin"
android_paddingRight="@dimen/activity_horizontal_margin"
android_paddingTop="@dimen/activity_vertical_margin"
app_layout_behavior="@string/appbar_scrolling_view_behavior"
tools_context="com.tutorials.hp.listviewcontextmenu.MainActivity"
tools_showIn="@layout/activity_main">
<ListView
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_id="@+id/lv"
android_layout_alignParentLeft="true"
android_layout_alignParentStart="true" />
</RelativeLayout>
(c). model.xml
- É nosso layout personalizado de linha de visualização de listas.
- Vai ser inflado em uma única linha.
- Contém uma visualização de cartão com imagens e texto.
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
android_orientation="horizontal" android_layout_width="match_parent"
android_layout_margin="10dp"
card_view_cardCornerRadius="10dp"
card_view_cardElevation="10dp"
android_layout_height="wrap_content">
<RelativeLayout
android_layout_width="match_parent"
android_layout_height="match_parent">
<ImageView
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_id="@+id/movieImage"
android_padding="10dp"
android_src="@drawable/ghost" />
<TextView
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_textAppearance="?android:attr/textAppearanceLarge"
android_text="Name"
android_id="@+id/nameTxt"
android_padding="10dp"
android_textColor="@color/colorAccent"
android_layout_below="@+id/movieImage"
android_layout_alignParentLeft="true"
/>
<TextView
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_textAppearance="?android:attr/textAppearanceLarge"
android_text=" John Doe a former FBI Agent and now Physics teacher .is wrongly accussed of murdering an innocent child.He makes it his business to find the bad guys who did taht.He convinces hacker Aram to join him.....
"
android_id="@+id/descTxt"
android_padding="10dp"
android_layout_below="@+id/nameTxt"
android_layout_alignParentLeft="true"
/>
<TextView
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_textAppearance="?android:attr/textAppearanceMedium"
android_text="TV Show"
android_id="@+id/posTxt"
android_padding="10dp"
android_layout_below="@+id/movieImage"
android_layout_alignParentRight="true" />
<CheckBox
android_layout_width="wrap_content"
android_layout_height="wrap_content"
android_id="@+id/chk"
android_layout_alignParentRight="true"
/>
</RelativeLayout>
</android.support.v7.widget.CardView>
3. Classes Java
Estamos usando a linguagem de programação java.
Teremos 5 aulas:
(a). Filme.java
- É nosso objeto de dados, uma classe POJO.
- Representa um único objeto de filme com várias propriedades.
- Cada CardView irá conter um filme.
public class Movie {
private String name;
private int image;
public Movie(String name, int image) {
this.name = name;
this.image = image;
}
public String getName() {
return name;
}
public int getImage() {
return image;
}
}
(b). LongClickListener
- É uma interface.
- Contém a assinatura para nosso ouvinte LongClick.
public interface LongClickListener {
void onItemLongClick();
}
(c). MyViewHolder.java
- Nossa classe ViewHolder.
- Terão vistas para serem recicladas.
- Irá implementar View.OnLongClickListener e View.OnCreateContextMenuListener.
public class MyViewHolder implements View.OnLongClickListener,View.OnCreateContextMenuListener {
ImageView img;
TextView nameTxt;
LongClickListener longClickListener;
public MyViewHolder(View v) {
img= (ImageView) v.findViewById(R.id.movieImage);
nameTxt= (TextView) v.findViewById(R.id.nameTxt);
v.setOnLongClickListener(this);
v.setOnCreateContextMenuListener(this);
}
public void setLongClickListener(LongClickListener lc)
{
this.longClickListener=lc;
}
@Override
public boolean onLongClick(View v) {
this.longClickListener.onItemLongClick();
return false;
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
menu.add(0,0,0,"Share");
menu.add(0,1,0,"Rate");
menu.add(0,2,0,"Watch");
}
}
(d). CustomAdapter.java
- Nossa classe adaptador.
- Derivações do `BaseAdaptador'.
Adaptará nossos dados aos nossos pontos de vista personalizados.
public class CustomAdapter extends BaseAdapter {
Context c;
ArrayList<Movie> movies;
LayoutInflater inflater;
String name;
public CustomAdapter(Context c, ArrayList<Movie> movies) {
this.c = c;
this.movies = movies;
}
@Override
public int getCount() {
return movies.size();
}
@Override
public Object getItem(int position) {
return movies.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if(inflater==null)
{
inflater= (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
if(convertView==null)
{
convertView=inflater.inflate(R.layout.model,parent,false);
}
//BIND DATA TO VIEWS
MyViewHolder holder=new MyViewHolder(convertView);
holder.nameTxt.setText(movies.get(position).getName());
holder.img.setImageResource(movies.get(position).getImage());
holder.setLongClickListener(new LongClickListener() {
@Override
public void onItemLongClick() {
name=movies.get(position).getName();
Toast.makeText(c,name,Toast.LENGTH_SHORT).show();
}
});
return convertView;
}
public void getSelecetedItem(MenuItem item)
{
Toast.makeText(c,name+" "+item.getTitle(),Toast.LENGTH_SHORT).show();
}
}
(e). MainActivity.java
- Nossa PrincipalAtividade.
- Lista de ReferênciasVista a partir do layout.
- Instala o CustomAdapter e o configura para nossa ListView.
public class MainActivity extends AppCompatActivity {
ListView lv;
CustomAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
lv= (ListView) findViewById(R.id.lv);
adapter=new CustomAdapter(this,getMovies());
lv.setAdapter(adapter);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
adapter.getSelecetedItem(item);
return super.onContextItemSelected(item);
}
private ArrayList<Movie> getMovies() {
//COLECTION OF CRIME MOVIES
ArrayList<Movie> movies=new ArrayList<>();
Movie movie=new Movie("Shuttle Carrier",R.drawable.shuttlecarrier);
//ADD ITR TO COLLECTION
movies.add(movie);
movie=new Movie("Fruits",R.drawable.fruits);
movies.add(movie);
movie=new Movie("Breaking Bad",R.drawable.breaking);
movies.add(movie);
movie=new Movie("Crisis",R.drawable.crisis);
movies.add(movie);
movie=new Movie("Ghost Rider",R.drawable.rider);
movies.add(movie);
movie=new Movie("Star Wars",R.drawable.starwars);
movies.add(movie);
movie=new Movie("BlackList",R.drawable.red);
movies.add(movie);
movie=new Movie("Men In Black",R.drawable.meninblack);
movies.add(movie);
movie=new Movie("Game Of Thrones",R.drawable.thrones);
movies.add(movie);
return movies;
}
}
4. Download
Ei, tudo está em referência ao código fonte que é bem comentado e fácil de entender e pode ser baixado abaixo.
Verifique também nosso vídeo tutorial, que é mais detalhado e explicado passo a passo.
| --- |
|---|