Autore Topic: setOnClickListener bottone dialog non funziona  (Letto 525 volte)

Offline redjin

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc One S
  • Sistema operativo:
    Elementary OS Luna, Windows 8.1
setOnClickListener bottone dialog non funziona
« il: 02 Agosto 2014, 11:31:31 CEST »
0
Salve, ho provato a creare un dialog personalizzato, molto semplice, sulla mia app, che viene attivato quando si preme un bottone. Il problema sta poi nella gestione del OnClickListener del bottone del dialog, crasha ancor prima di mostrarmi il dialog; se invece commento il setOnClickListener inerente al bottone del dialog, il dialog viene visualizzato. Vorrei capire come fare a risolvere questo problema.

Il codice è questo:
Codice (Java): [Seleziona]
package com.calcetto.gianni.calcettoteam;

import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;


import java.util.ArrayList;


public class MyActivity extends Activity {

   public ArrayList<String> nomi = new ArrayList<String>();
   ListView lista;
   Button aggiungi;
   Button randomize;
   Button dialok;

     final Context context = this;
    final Dialog dial = new Dialog(context);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        lista = (ListView) findViewById(R.id.listView);
        aggiungi = (Button) findViewById(R.id.add);
        randomize = (Button) findViewById(R.id.randomize);




        View.OnClickListener clic = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                switch(view.getId()) {
                    case R.id.add:

                        dial.setContentView(R.layout.layout_addpeople);
                        dial.setTitle("Aggiungi le persone");

                        dialok = (Button) findViewById(R.id.okbutton);
                        final EditText ed = (EditText) findViewById(R.id.nomi_lista);
                        dial.show();
                        break;
                    case R.id.okbutton:
                        dial.dismiss();
                }
            }
        };

        aggiungi.setOnClickListener(clic);
        dialok.setOnClickListener(clic);

    }


}

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:setOnClickListener bottone dialog non funziona
« Risposta #1 il: 02 Agosto 2014, 12:08:51 CEST »
0
Se guardi il LogCat c'è scritta la causa... molto probabilmente è perchè dialok è NULL (infatti non puoi impostare un listener su qualcosa che non esiste). Secondo me dovresti cambiare il modo in cui vuoi usare la dialog.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline redjin

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc One S
  • Sistema operativo:
    Elementary OS Luna, Windows 8.1
Re:setOnClickListener bottone dialog non funziona
« Risposta #2 il: 02 Agosto 2014, 12:12:40 CEST »
0
Si l'errore dovrebbe essere quello, ma non mi sono venuti modi per ovviare alla cosa, anche perché i dialog sono lo prima volta che li uso e non so bene come gestirli..

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:setOnClickListener bottone dialog non funziona
« Risposta #3 il: 03 Agosto 2014, 02:25:00 CEST »
0
Sarebbe meglio implementare l' activty con implements OnClickListeber.


Implementò quella roba con l'override di onClik(View view)
Metti i tuoi switch case.

E i bottoni fai button.setOnClickListener(this)

Io le variabili context e dialogo le inizializzerei dentro onCreate ()

Offline redjin

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc One S
  • Sistema operativo:
    Elementary OS Luna, Windows 8.1
Re:setOnClickListener bottone dialog non funziona
« Risposta #4 il: 03 Agosto 2014, 11:32:41 CEST »
0
Modificando come mi hai suggerito non è cambiato molto, sempre lo stesso problema...il codice l'ho cambiato così non so se ho capito male qualcosa:
Codice (Java): [Seleziona]
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;


import java.util.ArrayList;


public class MyActivity extends Activity implements View.OnClickListener{

   public ArrayList<String> nomi = new ArrayList<String>();
   ListView lista;
   Button aggiungi;
   Button randomize;
   Button dialok;
    EditText ed;
    Context context;
    Dialog dial;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        lista = (ListView) findViewById(R.id.listView);
        aggiungi = (Button) findViewById(R.id.add);
        randomize = (Button) findViewById(R.id.randomize);
        dial = new Dialog(context);
        dial.setContentView(R.layout.layout_addpeople);
        dial.setTitle("Aggiungi le persone");
        dialok = (Button) findViewById(R.id.okbutton);
        ed = (EditText) findViewById(R.id.nomi_lista);
        context = this;
        dialok.setOnClickListener(this);
        aggiungi.setOnClickListener(this);
    }


    @Override
    public void onClick(View view) {
        switch(view.getId()){
            case R.id.add:
                dial.show();
                break;
            case R.id.okbutton:
                nomi.add(ed.getText().toString());
                break;
        }
    }
}

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:setOnClickListener bottone dialog non funziona
« Risposta #5 il: 03 Agosto 2014, 12:20:51 CEST »
0
ovvio.
contex = this fallo dopo il setContentView().
Altrimenti il crash ce l'hai quando fai  fai = new Dialog(context);


comunque io per un AlertDialog daccio alertDialog.setOnClickListener(new DialogInterface.OnClickListenerr())
sicuro non ci sia anche per Dialog?

Offline redjin

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc One S
  • Sistema operativo:
    Elementary OS Luna, Windows 8.1
Re:setOnClickListener bottone dialog non funziona
« Risposta #6 il: 03 Agosto 2014, 12:34:32 CEST »
0
Si avevo notato che nel dichiarare OnClickListener c'è uno per le View e uno per i Dialog, proverò a differenziare i due e vedere come va

Post unito: 03 Agosto 2014, 12:51:39 CEST
Sono riuscito ad ovviare al problema del NullPointerException sistemando la dichiarazione dei widget del dialog in questo modo:
 
Codice (Java): [Seleziona]
dialok = (Button) dial.findViewById(R.id.okbutton);
        ed = (EditText) dial.findViewById(R.id.nomi_lista);

Ora però non fa effettivamente il bottone, ho anche provato a fare comparire un messaggio con Toast ma nulla
« Ultima modifica: 03 Agosto 2014, 12:51:39 CEST da redjin, Reason: Merged DoublePost »