Jump to content
jrxxjr

Erro em Aplicação Android - Erro no ListView com botões

Recommended Posts

Sou iniciante em Android, e fiz uma pequena aplicação Android de teste, usando Java, para aprender a utilizar um ListView com botões, e tive um problema. Os botões não funcionam direito, as vezes eu clico em cima do Edit, ele muda a mensagem para clicado, "Edit", confirmando que eu cliquei ai. Mas tem vezes que eu clico no botão Delete, e depois no botão Edit, e o texto não é mudado, ou seja o evento click não funcionou, se eu coloco um break point, no código-fonte, onde está entrando no evento setOnItemClickListener. Mas a mensagem exibida, não está correta.
E tem um outro erro, de funcionamento do AlertDialog, da mensagem de confirmação de deleção.
O código-fonte está abaixo.
Por favor, alguém poderia me ajudar ?

 

AgendaActivity.java

package com.test.android.view;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.test.android.model.Agenda;
import com.test.android.util.Util;

public class AgendaActivity extends AppCompatActivity {

    ListView listview;
    MyArrayAdapter agendaArrayAdapter;
    ArrayList<AgendaTo> agendaArray = new ArrayList<AgendaTo>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_agenda);

        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");

        agendaArray.add(new AgendaTo(sdf.format(new Date()), Util.fillSpaces("Nick", 50)));
        agendaArray.add(new AgendaTo(sdf.format(new Date()), Util.fillSpaces("John", 50)));
        agendaArray.add(new AgendaTo(sdf.format(new Date()), Util.fillSpaces("Anthony", 50)));
        agendaArray.add(new AgendaTo(sdf.format(new Date()), Util.fillSpaces("James", 50)));
        agendaArray.add(new AgendaTo(sdf.format(new Date()), Util.fillSpaces("Jack", 50)));
        agendaArray.add(new AgendaTo(sdf.format(new Date()), Util.fillSpaces("Jeremy", 50)));
        agendaArray.add(new AgendaTo(sdf.format(new Date()),Util.fillSpaces("Long", 50)));

        agendaArrayAdapter = new MyArrayAdapter(AgendaActivity.this, R.layout.list_item, agendaArray);
        listview = (ListView) findViewById(R.id.listView);
        listview.setItemsCanFocus(false);
        listview.setAdapter(agendaArrayAdapter);

        listview.setOnItemClickListener(new OnItemClickListener() {

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

                Toast.makeText(AgendaActivity.this,
                        "List Item Clicked:" + position, Toast.LENGTH_LONG)
                        .show();
            }
        });

    }

} 

MyArrayAdapter.java

package com.test.android.view;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.text.SimpleDateFormat;
import java.util.ArrayList;


public class MyArrayAdapter extends ArrayAdapter<AgendaTo> {

    Context context;
    int layoutResourceId;
    ArrayList<AgendaTo> agendas = new ArrayList<AgendaTo>();

    public MyArrayAdapter(Context context, int layoutResourceId,
                          ArrayList<AgendaTo> agendas) {
        super(context, layoutResourceId, agendas);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.agendas = agendas;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View item = convertView;
        AgendaWrapper agendaWrapper = null;

        if (item == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            item = inflater.inflate(layoutResourceId, parent, false);
            agendaWrapper = new AgendaWrapper();
            agendaWrapper.nome = (TextView) item.findViewById(R.id.textNome);
            agendaWrapper.data = (TextView) item.findViewById(R.id.textData);
            agendaWrapper.edit = (Button) item.findViewById(R.id.btnEdit);
            agendaWrapper.delete = (Button) item.findViewById(R.id.btnDelete);
            item.setTag(agendaWrapper);
        } else {
            agendaWrapper = (AgendaWrapper) item.getTag();
        }

        AgendaTo agenda = agendas.get(position);
        agendaWrapper.nome.setText(agenda.getNome());
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
        agendaWrapper.data.setText(sdf.format(agenda.getData()));        

        agendaWrapper.edit.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Toast.makeText(context, "Edit", Toast.LENGTH_LONG).show();
            }
        });

        final int absolutePsition = position;
        final AgendaWrapper itemDelete = agendaWrapper;
        final ViewGroup viewGroup = parent;

        agendaWrapper.delete.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Toast.makeText(context, "Delete " + absolutePsition, Toast.LENGTH_LONG).show();
                AlertDialog diaBox = AskOption(itemDelete, absolutePsition, viewGroup);
                diaBox.show();

            }
        });

        return item;

    }

    private AlertDialog AskOption(AgendaWrapper agendaWrapper, int position, final ViewGroup viewGroup) {
        final int deletePosition = position;
        AlertDialog myQuittingDialogBox = new AlertDialog.Builder(context)
			
                .setTitle("Delete")
                .setMessage("Do you want to Delete")
			
                .setPositiveButton("Delete", new DialogInterface.OnClickListener() {

                    public void onClick(DialogInterface dialog, int whichButton) {
                        agendas.remove(deletePosition);
                        refreshListView(agendas, viewGroup);
                        dialog.dismiss();
                    }

                    private void refreshListView(final ArrayList<AgendaTo> agendas, final ViewGroup viewGroup) {
                        final MyArrayAdapter myArrayAdapter = new MyArrayAdapter(context, R.layout.list_item, agendas);
                        final LayoutInflater inflater = ((Activity) context).getLayoutInflater();
                        final View view = inflater.inflate(layoutResourceId, viewGroup, false);
                        final ListView listview = (ListView) view.findViewById(R.id.listView);
                        listview.setAdapter(myArrayAdapter);
                    }

                })
                .setNegativeButton("cancel", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                })
                .create();

        return myQuittingDialogBox;
    }


    static class AgendaWrapper {
        TextView nome;
        TextView data;
        Button edit;
        Button delete;
    }

}

list_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="4dp"
    tools:context=".AgendaActivity" >

    <TextView
        android:id="@+id/textNome"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="Nome:"
        android:width="50dp"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/textData"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textData"
        android:layout_alignTop="@id/textNome"
        android:layout_alignRight="@id/textNome"
        android:layout_alignParentLeft="true"
        android:layout_marginTop="5dp"
        android:width="50dp"
        android:text="Data:"
        android:textAppearance="?android:attr/dateTextAppearance"
        android:textSize="16sp" />

    <Button
        android:id="@+id/btnEdit"
        android:layout_width="80dp"
        android:layout_height="40dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:background="#99CC"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:text="Edit"
        android:textColor="#FFFFFF" />

    <Button
        android:id="@+id/btnDelete"
        android:layout_width="80dp"
        android:layout_height="40dp"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/btnEdit"
        android:layout_marginTop="3dp"
        android:background="#99CC"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:text="Delete"
        android:textColor="#FFFFFF" />

</RelativeLayout>

activity_agenda.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#990044"
    tools:context="com.test.android.view.AgendaActivity" >

    <TextView
        android:id="@+id/listLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:text="Touch List"
        android:textColor="#FFFFFF"
        android:textSize="25sp" />

    <ListView
        android:id="@+id/listView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@+id/listLabel"
        android:layout_marginTop="5dp"
        android:cacheColorHint="#FFFFFF" />

</RelativeLayout>

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Alisson Hoepers
      Olá! Estou recebendo esse erro no meu log do Wildfly, procurando pela internet não encontrei nada em relação a isso, vejam abaixo o erro:
       
      2020-07-08 00:09:34,699 ERROR [io.undertow.request] (default I/O-4) UT005071: Undertow request failed HttpServerExchange{ CONNECT ext.baidu.com:443}: java.lang.IllegalArgumentException: UT000068: Servlet path match failed     at io.undertow.servlet.handlers.ServletPathMatchesData.getServletHandlerByPath(ServletPathMatchesData.java:83)     at io.undertow.servlet.handlers.ServletPathMatches.getServletHandlerByPath(ServletPathMatches.java:88)     at io.undertow.servlet.handlers.ServletInitialHandler.handleRequest(ServletInitialHandler.java:146)     at io.undertow.server.handlers.HttpContinueReadHandler.handleRequest(HttpContinueReadHandler.java:65)     at io.undertow.server.handlers.PathHandler.handleRequest(PathHandler.java:91)     at org.wildfly.extension.undertow.Host$OptionsHandler.handleRequest(Host.java:399)     at io.undertow.server.handlers.HttpContinueReadHandler.handleRequest(HttpContinueReadHandler.java:65)     at org.wildfly.extension.undertow.Host$AcmeResourceHandler.handleRequest(Host.java:421)     at org.wildfly.extension.undertow.Host$HostRootHandler.handleRequest(Host.java:430)     at io.undertow.server.handlers.NameVirtualHostHandler.handleRequest(NameVirtualHostHandler.java:54)     at io.undertow.server.handlers.error.SimpleErrorPageHandler.handleRequest(SimpleErrorPageHandler.java:78)     at io.undertow.server.handlers.CanonicalPathHandler.handleRequest(CanonicalPathHandler.java:49)     at org.wildfly.extension.undertow.Server$DefaultHostHandler.handleRequest(Server.java:190)     at io.undertow.server.handlers.ChannelUpgradeHandler.handleRequest(ChannelUpgradeHandler.java:211)     at io.undertow.server.protocol.http2.Http2UpgradeHandler.handleRequest(Http2UpgradeHandler.java:102)     at io.undertow.server.handlers.DisallowedMethodsHandler.handleRequest(DisallowedMethodsHandler.java:61)     at io.undertow.server.Connectors.executeRootHandler(Connectors.java:376)     at io.undertow.server.protocol.http.HttpReadListener.handleEventWithNoRunningRequest(HttpReadListener.java:255)     at io.undertow.server.protocol.http.HttpReadListener.handleEvent(HttpReadListener.java:136)     at io.undertow.server.protocol.http.HttpOpenListener.handleEvent(HttpOpenListener.java:162)     at io.undertow.server.protocol.http.HttpOpenListener.handleEvent(HttpOpenListener.java:100)     at io.undertow.server.protocol.http.HttpOpenListener.handleEvent(HttpOpenListener.java:57)     at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92)     at org.xnio.ChannelListeners$10.handleEvent(ChannelListeners.java:291)     at org.xnio.ChannelListeners$10.handleEvent(ChannelListeners.java:286)     at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92)     at org.xnio.nio.QueuedNioTcpServer$1.run(QueuedNioTcpServer.java:132)     at org.xnio.nio.WorkerThread.safeRun(WorkerThread.java:612)     at org.xnio.nio.WorkerThread.run(WorkerThread.java:479) Alguém já passou por isso ou saberia indicar o que poderia ser?
    • By Pavolin9
      Bom dia, estou desenvolvendo um sistema bem simples de estoque onde os itens serao armazenados em uma matriz segue codigo:
          package main;          import java.io.Console;     import java.util.Arrays;     import java.util.Scanner;          public class IncluirItem{         public static void main(String[] args) {             String[][] itens = new String[2][5];             String[] campos = new String[7];             int opcao = 0;             int remover;             int verificar = 0;             int adcionar = 0;             int tamanho = 2;                          Scanner sc = new Scanner(System.in);                          campos [1] = "Nome";             campos [2] = "Codigo de barras";             campos [3] = "quantidade";             campos [4] = "validade";             campos [5] = "data de entrada";                          do {                 System.out.println("\n\n### Sistema de estoque - simplificado ###");                 System.out.println("=========================================");                 System.out.println("      |     1 - Adcionar itens   |");                 System.out.println("      |     2 - Excluir itens    |");                 System.out.println("      |     3 - Mostrar itens    |");                 System.out.println("      |     0 - Sair             |");                 System.out.println("=========================================\n");                                  System.out.println("Escolha uma opcao: ");                 opcao = sc.nextInt();                 System.out.print("\n");                                  switch (opcao) {                 case 1:                     System.out.println("Cadastro de itens: ");                     //Adciona itens                      for (int i = 0; i <2; i++) {                         System.out.println("Adcionar item? ");                         System.out.println("1 para sim \n2 para nao: ");                         adcionar = sc.nextInt();                         if (adcionar == 1) {                             System.out.printf("%d. item \n", (i+1));                             verificar = verificar + 1;                             for (int j=0; j < 5; j++) {                                     System.out.printf("%s ", campos[j+1]);                                 System.out.printf("= ", i,(j+1));                                 itens[i][j] = sc.next();                                                              }                             System.out.printf("\n");                         }                         else {                             break;                         }                     }                                              break;                 case 2:                     //Remove itens                     System.out.println("Exclusao de itens: ");                     if(verificar > 0) {                         for (int i = 0; i <2; i++) {                                 System.out.printf("%d. item \n", (i+1));                             System.out.printf("ID do produto= 00%d \n", (i+1));                             System.out.printf("\n");                         }                     }                     else {                         System.out.println("Nenhum item listado!");                     }                     System.out.println("\nEscolha o numero do item a ser removido: \n");                     remover = sc.nextInt();                     for (int i = 0; i <2; i++) {                         if(remover == 2) {                         itens[i] = itens[i-1];                         }                     }                     break;                 case 3:                     //Mostra itens                     if(verificar > 0) {                                                      for (int i = 0; i <2; i++) {                                     if (verificar == 2) {                                 System.out.printf("%d. item \n", (i+1));                                 System.out.printf("ID do produto= 00%d \n", (i+1));                                 for (int j=0; j < 5; j++) {                                         System.out.printf("%s ", campos[j+1]);                                     System.out.printf("= %s \n", itens [i][j]);                                 }                                 System.out.printf("\n");                             }                             else {                                         itens = Arrays.copyOf(itens, tamanho - 1);                                         verificar = 0;                                         System.out.printf("%d. item \n", (i+1));                                         System.out.printf("ID do produto= 00%d \n", (i+1));                                         for (int j=0; j < 5; j++) {                                                 System.out.printf("%s ", campos[j+1]);                                             System.out.printf("= %s \n", itens [i][j]);                                         }                                         System.out.printf("\n");                                         break;                                 }                         }                     }                     else {                         System.out.println("Nenhum item listado!");                     }                                          break;                 default:                     System.out.println("Opção Inválida!");                     break;                 }             } while(opcao != 0);         }     }  
      Minha duvida é a seguinte, eu quero excluir uma posicao da matriz, exemplo: registrei dois itens, na coluna um e coluna dois da matriz e gostaria de remover a coluna um da lista, como realizo essa função, e outra coisa, eu gostaria de quando eu inserisse pela segunda vez algum item a matriz começasse na proxima possicao vazia, atualmente se eu pedir para inserir um novo item a matriz começa da primeira posicao e assim apaga os elementos ja inseridos.
       
    • By Alisson Hoepers
      Olá pessoal! Para mostrar a lista de um cadastro no meu sistema, eu populo a consulta em um DTO conforme abaixo. Minha pergunta é: Existe uma forma mais simples de popular a consulta na lista do DTO de forma mais simples?
       
      public List<ObjetoDTO> find(Query query) {     @SuppressWarnings("unchecked") List<Object[]> queryResult = query.getResultList(); List<ObjetoDTO> list = new ArrayList<>(); if (queryResult.isEmpty() == false) { for (Object[] item : queryResult) { ObjetoDTO dto = new ObjetoDTO(); dto.setId((Integer) item[0]); dto.setTitulo((String) (item[1])); dto.setDescricao((String) (item[2])); list.add(dto); } } return list; }  
    • By NaPraia
      Beleza pessoal?
       
      seguinte, tenho que desenvolver uma aplicação Java para me comunicar com outro sistema, via Adapter.
      Qual é a melhor forma de fazer isso?
       
      Eu comecei a desenvolver no Eclipse, porém, quando abri o projeto, não coloquei nem com opção de Webservice nem de Maven
       
      E outra dúvida, se instala o Java em servidor? um cara falou isso aqui mas não sei se está zuando.
    • By Luiz Henrique de Sousa
      Estou utilizando rich faces e seu componente JQuery, para realizar formatação de campos decimais, estou utilizando o maskMoney e atribui uma precisão de 3 casas no meu input text, e tenho um campo disabled que é booleano, ele é acionado caso tenha mais coisas associadas a outro item no form abaixo, mesmo sabendo que a função disabled é apenas vísivel ela não faz nada de diferente, quando a minha função disabled é acionada tem como eu tirar as casas decimais dela.
      Fiz dessa forma abaixo:
       
      <f:facet name="header"> <h:outputLabel value="#{messages.conversion}"/> </f:facet> <h:inputText id="fldConversion" value="#{row.vlConversion}" label="#{messages.conversion}" maxLength="25" disabled="#{defaultMBean.canDisabledConversion(row)}"> <a4j:ajax event="change" immediate="true" render="@all, partnerItem, dataModel"/> <f:converter converterId="javax.faces.BigDecimal"/> <f:validateLength maximum="30" /> </h:outputText> <rich:jQuery selector="#fldConversion" query="maskMoney({decimal:''.'',allowNegative:false, showSymbol:false, thousands: '''',precision: 3})"/> E criei esse método para quando estiver desativado o campo:
       
      public BigDecimal canDisableConversionE(TypeDTO row) { BigDecimal r = row.getConversionValue().setScale(0, RoundingMode.HALF_EVEN); System.out.println(r); return r; } public Boolean canDisableConversion(TypeDTO row) { if (row.getId() == 1L && !canDisableConversionE()) { return false; } if (IsWeight(row.getId())) { return true; } return getConfigFacade().canDisableConversionE(row.getConversionValue()); }  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.