2017-10-16 2 views
0

Je suis en train de créer une boîte de dialogue personnalisée où les clics de bouton peuvent être manipulés par l'activité principale qui instancie, quelque chose comme la façon dont le AlertDialog.Builder attribue les auditeurs via son setPositiveButton() et setNegativeButton() méthodes.Manipulation bouton de dialogue de classe externe de l'activité principale

Voici ce que je l'ai fait:

// THE MAIN ACTIVITY 

public class main_code extends AppCompatActivity { 

    private commonModule comMod; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     comMod = new commonModule(this);  
    } 

    private void showDialog() { 
    DialogInterface.OnClickListener dialogHandler = 
     new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
     // process "PROCEED" button 
     } 
    }; 

    commonModule.myDialog customDialog = comMod.new myDialog(); 
    customDialog.inputBox(this, "Submit Results", 
     "Your results will be submitted.", dialogHandler); 
    } 
} 


// THE COMMON MODULE CLASS 

public class commonModule { 

    public commonModule(Context context){ 
    this.context = context; 
    this.activity = (Activity) context; 
    } 

    public class myDialog {  

    public void showDialog(Activity activity, String title, String message, 
          DialogInterface.OnClickListener dialogHandler) { 

     final Dialog panel = new Dialog(activity); 
     panel.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     panel.setContentView(R.id.customLayout); 
     panel.setCancelable(false); 

     TextView panelTitle = (TextView) panel.findViewById(R.id.title); 
     panelTitle.setTypeface(fontRes(PlayRegular)); 
     panelTitle.setText(title); 

     TextView msgboxText = (TextView) panel.findViewById(R.id.content); 
     msgboxText.setTypeface(fontRes(PlayRegular)); 
     msgboxText.setText(message); 

     Button button1 = (Button) panel.findViewById(R.id.button1); 
     button1.setTypeface(fontRes(PlayRegular)); 
     button1.setText("ABORT"); 
     button1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      panel.dismiss(); 
     } 
     }); 

     Button button2 = (Button) panel.findViewById(R.id.button2); 
     button2.setTypeface(fontRes(PlayRegular)); 
     button2.setText("PROCEED"); 

     button2.setOnClickListener(dialogHandler); 
     // error: View.OnClickListener cannot be applied to Dialog.OnClickListener 

     panel.show(); 
    } 
    } 
} 

J'ai essayé d'utiliser View.OnClickListener() aussi bien, mais sans succès. Je voudrais que le générateur de dialogue soit commun et générique, et en tant que tel, l'écouteur de clic devrait être unique pour chaque boîte de dialogue.

Toute suggestion serait vraiment appréciée.

TIA.

Répondre

1

Changer votre dialogHandler à View.OnClickListener au lieu de DialogInterface.OnClickListener:

private void showDialog() { 
    View.OnClickListener dialogHandler = 
     new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     // process "PROCEED" button 
     } 
    }; 

    commonModule.myDialog customDialog = comMod.new myDialog(); 
    customDialog.inputBox(this, "Submit Results", 
     "Your results will be submitted.", dialogHandler); 
    } 

et dans le module commun:

public void showDialog(Activity activity, String title, String message, 
          View.OnClickListener dialogHandler) { 
    ... 
    button2.setOnClickListener(dialogHandler); 
    panel.show(); 
} 
+1

MERCI, Marmor. * Grattez mon dernier commentaire. * ** Ca marche! ** – iSofia