Autore Topic: Creare classe Dialog da usare su molteplici activity  (Letto 837 volte)

Offline MisterAnt

  • Utente normale
  • ***
  • Post: 272
  • Respect: +4
    • IlSikano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S4 Active,Galaxy SIII I9300, Galaxy Tab GT-P5100
  • Play Store ID:
    MisterAnt
  • Sistema operativo:
    Ubuntu 12.04/Winzoz 7/Winzoz xp
Creare classe Dialog da usare su molteplici activity
« il: 03 Gennaio 2013, 15:53:50 CET »
0
Salve a tutti :)
Il mio scopo è quello di implementare una classe dialog da utilizzare su molteplici activity della mia app...l'unica cosa..ogni qualvolta che creo una semplice e banale oggetto dal ModelloDialog.class, la mia app crash esattamente quando devo mostrarla... durante show();

MAIN
Codice (Java): [Seleziona]
             ReadyListener readyListener = null;
                                ModelDialog myDialog = new ModelDialog(getApplicationContext(),"",readyListener);
                                myDialog.show();
DIALOG CLASS
Codice (Java): [Seleziona]
[public class ModelDialog extends Dialog {

public interface ReadyListener {
    public void ready(String name);
}

private String name;
private ReadyListener readyListener;
EditText etName;

public ModelDialog(Context context, String name,
        ReadyListener readyListener) {
    super(context);
    this.name = name;
    this.readyListener = readyListener;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.custom_dialog);
    setTitle("Enter your Name ");
    Button buttonOK = (Button) findViewById(R.id.Button01);
    buttonOK.setOnClickListener(new OKListener());
    etName = (EditText) findViewById(R.id.EditText01);
}

private class OKListener implements android.view.View.OnClickListener {
    @Override
    public void onClick(View v) {
        readyListener.ready(String.valueOf(etName.getText()));
        ModelDialog.this.dismiss();
    }
}
}


RISORSA XML
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >
   
       
    <EditText
       android:id="@+id/EditText01"
       android:layout_height="wrap_content"
       android:text="Enter your name"
       android:layout_width="250dip">
    </EditText>

        <Button
            android:id="@+id/Button01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/EditText01"
            android:layout_marginLeft="87dp"
            android:text="click" />
   
</RelativeLayout>
Qualcuno sa dirmi ove sbaglio???
« Ultima modifica: 03 Gennaio 2013, 15:56:04 CET da MisterAnt »
Se le zampe del coniglio sono così fortunate, che fine ha fatto il coniglio?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Creare classe Dialog da usare su molteplici activity
« Risposta #1 il: 03 Gennaio 2013, 17:15:16 CET »
+1
Sicuramente sbagli non postando il Logcat ma credo di aver capito comunque il problema, scommetto che l'eccezione è una BadTokenException.

Non puoi mostrare un dialog usando getApplicationContext() come context ma devi utilizzare quello dell'Activity.
Sostituisci quel getApplicationContext con NomeActivity.this e dovrebbe andare.

Offline MisterAnt

  • Utente normale
  • ***
  • Post: 272
  • Respect: +4
    • IlSikano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S4 Active,Galaxy SIII I9300, Galaxy Tab GT-P5100
  • Play Store ID:
    MisterAnt
  • Sistema operativo:
    Ubuntu 12.04/Winzoz 7/Winzoz xp
Re:Creare classe Dialog da usare su molteplici activity
« Risposta #2 il: 03 Gennaio 2013, 17:19:49 CET »
0
Purtroppo la classe che mi sono creato e che extend Dialog non può utilizzare gli ascoltatori/listener dei button!!!!!E adesso?!?! Qualche suggerimento??
 Esempio classe Dialog personalizzata
Codice (Java): [Seleziona]
public class UniversalDialog extends Dialog{
///////////////////////////////////////////////////////attributi
        private int id;
        private Button d1,d2,d3,d4;
        private UniversalDialog dialog;
/////////////////////////////////////////////////////////////costruttore
        public UniversalDialog(Context context, int indice) {
                super(context);
                this.id=indice;
                Distingui(indice);
        }
////////////////////////////////////////metodi
        public void Distingui(int i){
                switch(i){
                case 1:
                        setContentView(R.layout.dialog_1);
                        setTitle("--Uno--");
                       
                        break;
                case 2:
                        setContentView(R.layout.dialog_2);
                        setTitle("--Due--");
                       
                        break;
                }
        }
       
///////////////////////////////////////////////////////
        public void Elemento(UniversalDialog a){
                this.dialog=a;
                Click();
        }
////////////////////////////////////////////////
        public void Click(){
                switch(id){
                case 1:
                        d1=(Button)dialog.findViewById(R.id.yes1);
                        d2=(Button)dialog.findViewById(R.id.cancel1);
                       //adesso come faccio a sapere se il button è cliccabilee a catturare l'evento????
                        break;
                case 2:
                        d1=(Button)dialog.findViewById(R.id.yes2);
                        d2=(Button)dialog.findViewById(R.id.cancel2);
                        break;
                }
        }
}
« Ultima modifica: 04 Gennaio 2013, 11:13:23 CET da MisterAnt »
Se le zampe del coniglio sono così fortunate, che fine ha fatto il coniglio?

Offline MisterAnt

  • Utente normale
  • ***
  • Post: 272
  • Respect: +4
    • IlSikano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S4 Active,Galaxy SIII I9300, Galaxy Tab GT-P5100
  • Play Store ID:
    MisterAnt
  • Sistema operativo:
    Ubuntu 12.04/Winzoz 7/Winzoz xp
Re:Creare classe Dialog da usare su molteplici activity
« Risposta #3 il: 04 Gennaio 2013, 11:38:21 CET »
0
RISOLTO!
Posto l'esempio per aiutare i posteri
CLASSE MAIN
Codice (Java): [Seleziona]
                   dialog=new UniversalDialog(MainActivity.this ,i);
                   dialog.Elemento(dialog);
                   dialog.show();
CLASSE CUSTOM DIALOG
Codice (Java): [Seleziona]
public class UniversalDialog extends Dialog implements View.OnClickListener{
///////////////////////////////////////////////////////attributi
        private int id;
        private Button d1,d2,d3,d4;
        private Context ctx;
        private UniversalDialog dialog;
/////////////////////////////////////////////////////////////costruttore
        public UniversalDialog(Context context, int indice) {
                super(context);
                this.ctx=context;
                this.id=indice;
        }
       
         public void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    switch(id){
                        case 1:
                                setContentView(R.layout.dialog_1);
                                setTitle("--Uno--");
                                d1=(Button)dialog.findViewById(R.id.yes1);
                                d1.setOnClickListener(this);
                                d2=(Button)dialog.findViewById(R.id.cancel1);
                                d2.setOnClickListener(this);
                                break;
                        case 2:
                                setContentView(R.layout.dialog_2);
                                setTitle("--Due--");
                                d3=(Button)dialog.findViewById(R.id.yes2);
                                d3.setOnClickListener(this);
                                d4=(Button)dialog.findViewById(R.id.cancel2);
                                d4.setOnClickListener(this);
                                break;
                        }
                    }
///////////////////////////////////////////////////////
        public void Elemento(UniversalDialog a){
                this.dialog=a;
        }
////////////////////////////////////////////////

////////////////////////////////////////////
public void onClick(View v) {//GESTIONE EVENTI BUTTON
                switch(v.getId()){
                        case R.id.yes1:
                                Toast.makeText(ctx, "Yes UNO", Toast.LENGTH_SHORT).show();
                        break;
                        case R.id.yes2:
                                Toast.makeText(ctx, "Yes DUE", Toast.LENGTH_SHORT).show();
                        break;
                }
               
        }
}
« Ultima modifica: 04 Gennaio 2013, 11:45:41 CET da MisterAnt »
Se le zampe del coniglio sono così fortunate, che fine ha fatto il coniglio?