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" />
  1. Android:id="@+id/list_view"` - Estamos atribuindo à ListView uma identificação.
  2. android:layout_width="match_parent"` - Definimos a largura de nossa ListView para corresponder à do Layout no qual a ListView está sendo apresentada.
    1. 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.

Adaptador ListAdapter: O ListAdapter que é responsável por manter os dados que respaldam esta lista e por produzir uma visão para representar um item naquele conjunto de dados.

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:

1. android:divider Drawable ou cor a desenhar entre os itens da lista.
2. android:divider Drawable ou cor a desenhar entre os itens da lista.
3. 'android:dividerHeight' Altura da divisória.
4. android:entries Referência a um recurso de array que irá povoar a ListView.
5. 'android:footerDividersEnabled' Quando ajustado para falso, a ListView não desenhará o divisor antes de cada vista de rodapé.
6. android:headerDividersEnabled Quando definido como falso, a ListView não desenhará o divisor após cada visualização de cabeçalho.

Com quais tipos de Adaptadores o ListView pode ser utilizado?

Aqui estão alguns dos adaptadores que podem ser usados com a ListView:

Uma super classe de implementações comuns para uma interface android.widget.Adapter. Ela implementa tanto interfaces ListAdapter quanto SpinnerAdapter.
2. ArrayAdapter Um BaseAdapter criança que utiliza um conjunto de objetos arbitrários como fonte de dados.
3. CursorAdaptador Um resumo BaseAdaptador criança utilizada para expor dados do android.database.Cursor a uma 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:

  1. RelativeLayout - Nosso ViewGroup.
  2. 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

  1. Faça o download do projeto.
  2. Você receberá um arquivo zipado, extraia-o.
  3. Abra o Estúdio Android.
  4. Agora feche, projeto já aberto.
  5. Na barra de menu, clique em Arquivo >Novo> Importar Projeto.
  6. Agora escolha uma pasta de destino, de onde você quer importar o projeto.
  7. Escolha um Projeto Android.
  8. Agora clique em "OK".
  9. Feito, você acabou de importar o projeto, agora edite-o.

Mais recursos

GitHub Browse Browse GitHub Browse GitHub Browse
GitHub Download Link Download Download

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 <code>activity_main.xml</code>.

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.

GitHub Browse Browse GitHub Browse GitHub Browse
GitHub Download Link Download Download

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

  1. O que é uma ListView?
  2. O que é uma coleção ListView?
  3. Como preencher uma ListView a partir de uma List de POJO Objetos estrutura de dados em android studio.
  4. Como fazer um simples clique em um ouvinte em uma lista de visualização.
  5. O que é um adaptador ArrayAdapter?
  6. 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
  1. Primeiro, criar um projeto vazio no estúdio andróide. Vá para File -> New Project (Arquivo -> Novo Projeto).
  2. Digite o nome do aplicativo e escolha o nome da empresa.
  3. Escolha o SDK mínimo.
  4. Escolher atividade vazia.
  5. Clique em Finish.

Isto irá gerar para nós um projeto com o seguinte:

1. activity_main.xml XML Layout Será inflado na MainActivity View. Você adiciona suas visões e widgets aqui.
2. MainActivity.java Class Our Launcher activity

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:

  1. Desenhos.
  2. Layout.
  3. 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:

  1. id - um Inteiro. A identificação da pessoa.
  2. "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.

1. GitHub Download Direto Download Direto Download Direto Download Direto
2. GitHub Browse [GitHub Browse GitHub Browse
3. YouTube Nosso canal no YouTube Nosso canal no YouTube Nosso canal no YouTube

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

  1. Primeiro, criar um novo projeto no estúdio andróide. Vá para File -> New Project (Arquivo -> Novo Projeto).
  2. Digite o nome do aplicativo e escolha o nome da empresa.
    Diálogo Novo Projeto
  3. Escolha o SDK mínimo.
    Escolha o SDK mínimo
  4. Escolha a atividade Básica.
    Escolher atividade vazia
  5. Clique em Finish.
    Terminar

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

GitHub Browse Download Download

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

  1. Faça o download do projeto.
  2. Você receberá um arquivo zipado, extraia-o.
  3. Abra o Estúdio Android.
  4. Agora feche, projeto já aberto.
  5. Na barra de menu, clique em Arquivo >Novo> Importar Projeto.
  6. Agora escolha uma pasta de destino, de onde você quer importar o projeto.
  7. Escolha um Projeto Android.
  8. Agora clique em "OK".
  9. Feito, você acabou de importar o projeto, agora edite-o.

Mais recursos

GitHub Browse Browse GitHub Browse GitHub Browse
GitHub Download Link Download [Download

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

  1. O que é uma ListView?
  2. O que é um MenuDeContexto?
  3. Como criar uma visualização de lista personalizada com imagens, texto e menu de contexto em android studio.
  4. Como implementar um ouvinte de clique longo em uma visualização de lista.
  5. Como mostrar o menu de contexto com itens de menu quando uma visualização de lista é clicada com o botão direito do mouse.
    1. 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:

  1. activity_main.xml
  2. content_main.xml
  3. 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.

1. GitHub Download Direto GitHub Download Direto GitHub Download Direto
2. GitHub Browse [GitHub Browse GitHub Browse
3. YouTube Canal YouTube Canal YouTube Canal YouTube Canal YouTube

Categorized in: