Autore Topic: AlertDialog LayoutInflater  (Letto 955 volte)

Offline C_G

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
AlertDialog LayoutInflater
« il: 28 Novembre 2013, 00:27:32 CET »
0
Ho creato una semplice tastiera numerica che voglio visualizzare all'interno di una AlertDialog.
Stò ricevendo NullPointerException nell'ascoltatore
Codice (Java): [Seleziona]
v.setOnClickListener(numberClickListener);dove sbaglio?
Codice (Java): [Seleziona]
LayoutInflater layoutInflater = LayoutInflater.from(context);
                                       
View promptView = layoutInflater.inflate(R.layout.calc, null);

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);

                               
alertDialogBuilder.setView(promptView);

        final TextView input = (TextView) promptView.findViewById(R.id.TextView1);
                                       
                int numberButtons[] = { R.id.button0, R.id.but_1, R.id.button2,
                                  R.id.button3, R.id.button4, R.id.button5, R.id.button6,
                                  R.id.button7, R.id.button8, R.id.button9
                                };
                                int opperandButtons[] = {
                                       
                                        R.id.buttonDecimal
                                };
                                NumberButtonClickListener numberClickListener = new NumberButtonClickListener();
                                for(int id : numberButtons) {
                                 View v = findViewById(id);
                                 v.setOnClickListener(numberClickListener);
                                }
                               
                                OpperandButtonClickListener oppClickListener = new OpperandButtonClickListener();
                                for(int id : opperandButtons) {
                                 View v = findViewById(id);
                                 v.setOnClickListener(oppClickListener);
                                }
« Ultima modifica: 28 Novembre 2013, 00:29:19 CET da C_G »

Offline Paso

  • Utente junior
  • **
  • Post: 98
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy sIII mini
  • Sistema operativo:
    Linux Mint 17 64-bit
Re:AlertDialog LayoutInflater
« Risposta #1 il: 28 Novembre 2013, 15:18:17 CET »
0
A che riga ti dà l'errore il LogCat?

Offline C_G

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
Re:AlertDialog LayoutInflater
« Risposta #2 il: 28 Novembre 2013, 16:07:09 CET »
0
Ciao a questa riga
Codice (Java): [Seleziona]
v.setOnClickListener(numberClickListener);

Offline Paso

  • Utente junior
  • **
  • Post: 98
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy sIII mini
  • Sistema operativo:
    Linux Mint 17 64-bit
Re:AlertDialog LayoutInflater
« Risposta #3 il: 28 Novembre 2013, 16:22:26 CET »
0
Scrivi allora tutto il OnClickListener() dalla riga in cui lo dichiari, magari c'è qualche errore nella formattazione

Offline C_G

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
Re:AlertDialog LayoutInflater
« Risposta #4 il: 28 Novembre 2013, 16:28:29 CET »
0
eccoli:
Codice (Java): [Seleziona]
NumberButtonClickListener numberClickListener = new NumberButtonClickListener();
                                for(int id : numberButtons) {
                                 View v = findViewById(id);
                                 v.setOnClickListener(numberClickListener);
                                }
                               
                                OpperandButtonClickListener oppClickListener = new OpperandButtonClickListener();
                                for(int id : opperandButtons) {
                                 View v = findViewById(id);
                                 v.setOnClickListener(oppClickListener);
                                }

Offline Paso

  • Utente junior
  • **
  • Post: 98
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy sIII mini
  • Sistema operativo:
    Linux Mint 17 64-bit
Re:AlertDialog LayoutInflater
« Risposta #5 il: 28 Novembre 2013, 16:43:09 CET »
0
NumberButtonClickListener --> immagino tu l'abbia creato correttamente e sia un'implementazione del OnClickListener
Non ho capito molto ma
Codice (Java): [Seleziona]
View.OnClickListener numberClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // Qua devi scrivere qullo che vuoi che accada quando premi su v
    }
};
Così dichiari quello che deve accadere quando premi sulla View v.  Prova così e poi fammi sapere
« Ultima modifica: 28 Novembre 2013, 16:53:17 CET da Paso »

Offline C_G

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
Re:AlertDialog LayoutInflater
« Risposta #6 il: 28 Novembre 2013, 16:52:12 CET »
0
E' la prima volta che ho a che fare con LayoutInflater quindi potrei aver perso qualcosa.
Ti riassumo come ho fatto:
questa è la prima parte di codice
Codice (Java): [Seleziona]
LayoutInflater layoutInflater = LayoutInflater.from(context);
                                       
                                        View promptView = layoutInflater.inflate(R.layout.calc, null);
                                       
                                        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
                                       
                                        alertDialogBuilder.setView(promptView);

                                        final TextView input = (TextView) promptView.findViewById(R.id.TextView1);
                                       
                                int numberButtons[] = { R.id.button0, R.id.but_1, R.id.button2,
                                  R.id.button3, R.id.button4, R.id.button5, R.id.button6,
                                  R.id.button7, R.id.button8, R.id.button9
                                };
                                int opperandButtons[] = {
                                       
                                        R.id.buttonDecimal
                                };
                                NumberButtonClickListener numberClickListener = new NumberButtonClickListener();
                                for(int id : numberButtons) {
                                 View v = findViewById(id);
                                 v.setOnClickListener(numberClickListener);
                                }
                               
                                OpperandButtonClickListener oppClickListener = new OpperandButtonClickListener();
                                for(int id : opperandButtons) {
                                 View v = findViewById(id);
                                 v.setOnClickListener(oppClickListener);
                                }
                               
                                setCurrentString("0");
qui setto l'onclick della Alert:
Codice (Java): [Seleziona]
alertDialogBuilder
                                                        .setCancelable(false)
                                                        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                                                                                public void onClick(DialogInterface dialog, int id) {
                                                                                        // get user input and set it to result
                                                                                        mIm.setText(input.getText());
                                                                                }
                                                                        })
                                                        .setNegativeButton("Cancel",
                                                                        new DialogInterface.OnClickListener() {
                                                                                public void onClick(DialogInterface dialog,     int id) {
                                                                                        dialog.cancel();
                                                                                }
                                                                        });

                                        // create an alert dialog
                                        AlertDialog alertD = alertDialogBuilder.create();
....
....
Codice (Java): [Seleziona]
 private class NumberButtonClickListener implements OnClickListener {
                @Override
                public void onClick(View v)  {
                        String text = (String) ((Button)v).getText();                  
                        if (currentString.equals("0") || isTempStringShown) {
                                isTempStringShown = false;
                                setCurrentString(text);
                        }else {
                                setCurrentString(getCurrentString()+text);
                        }
                }
            }
           
            private class OpperandButtonClickListener implements OnClickListener {
                @Override
                public void onClick(View v)  {
                        int id = v.getId();
                if (id == R.id.buttonDecimal) {
                                if (!getCurrentString().contains(".")) {
                                        if (isTempStringShown) {
                                                isTempStringShown = false;
                                                setCurrentString("0");
                                        }
                                        setCurrentString(getCurrentString()+".");
                                }
                        }else {
                                //calculate(id);
                        }
                               
« Ultima modifica: 28 Novembre 2013, 17:15:57 CET da C_G »

Offline Paso

  • Utente junior
  • **
  • Post: 98
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy sIII mini
  • Sistema operativo:
    Linux Mint 17 64-bit
Re:AlertDialog LayoutInflater
« Risposta #7 il: 28 Novembre 2013, 17:24:18 CET »
0
Io per il LayoutInflater ho sempre usato
Codice (Java): [Seleziona]
LayoutInflater inflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.calc, (ViewGroup) findViewById(R.id.calc));
Ma non mi sembra quello l'errore.
Ma perchè crei una classe privata per l'OnClickListener? non ti conviene dichiararlo nella tua activity?