Bon, on s'entend pour dire qu' à Rome, on fait comme les Romains.

Mais bon, je suis tout nouveau dans le monde Java/Android avec un lourd passé de programmation sous Windows, alors forcément je traine avec moi des façons de faire qui ne sont peut-être pas acceptables sous Andoid.

Ce que je voulais faire, c'est les deux boites de dialogues modales de base, l'équivalent d'un "ShowMessage" (la vie est belle, pressez Ok) et d'un ConfirmBox (Ceci va effacer cela, on y va ou on annule?). Et j'ai bien précisé avec un fonctionnement modal.

Je fais un peu de recherche sur Internet et je tombe là-dessus:

http://stackoverflow.com/questions/2...s-up-net-style

Évidemment, je tombe sur le commentaire de Romain Guy. Pas de doute à mes yeux que le gars est plus que crédible (ingénieur/concepteur chez Google, c'est pas rien)

Alors quand il dit que des popup modals, ça se fait pas sous Android, bin j'aurais tendance à suivre son conseil, surtout que c'est un Romain.

Sauf que, dans l'intimité de mon foyer, j'ai écrit (en m'inspirant bien sûr des autres) dans un petit module deux petites classes "DialogMes" et "DialogConfirm". Elles fonctionnent très bien en mode modal et ne semblent pas mettre l'activité principale que les appelle dans tous ses états.

Je dois aussi avouer que je ne vois pas nulle part dans le code quoi que ce soit qui ferait que les popup fonctionne en modal, ce qui est pourtant le cas.

Ce que j'aimerais, c'est que vous me disiez ce qui est inacceptable dans mon code, si on veut respecter les façons de faire sous Android et pourquoi je devrais jeter ça à la poubelle:

Le module de classes générales:

TDialogs.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 
package ca.clubgps.TestDialogs;
 
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Message;
 
 
class DialogMes 
{
 
  AlertDialog alertDialog ;
  private static final Message NO_HANDLER = null;
  public DialogMes(Activity parent,String aTitle, String mes)
  {
    alertDialog = new AlertDialog.Builder(parent).create();
    alertDialog.setTitle(aTitle);    
    alertDialog.setMessage(mes) ;  
    alertDialog.setButton("OK",NO_HANDLER) ;    
    alertDialog.show() ; 
  } 
}
 
interface DlgConfirmEvent
{
  public void OnDlgConfirm(boolean yesPressed,int dlgID) ;
}  
 
class DialogConfirm
{
  DlgConfirmEvent owner  ;
  AlertDialog alertDialog ;
 
  public DialogConfirm(DlgConfirmEvent parent,String aTitle, String mes, int id)
  {
    owner = parent ;
    final int ownerID = id ;
    alertDialog = new AlertDialog.Builder((Activity)parent).create();
    alertDialog.setTitle(aTitle);
 
    alertDialog.setMessage(mes) ;  
    alertDialog.setButton(DialogInterface.BUTTON_POSITIVE,"Ok",new DialogInterface.OnClickListener(){           
      public void onClick(DialogInterface dialog, int which) 
      {
        owner.OnDlgConfirm(true,ownerID) ;
      }});  
    alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE,"Cancel",new DialogInterface.OnClickListener(){           
      public void onClick(DialogInterface dialog, int which) 
      {
        owner.OnDlgConfirm(false,ownerID) ;
      }});  
    alertDialog.show() ; 
  } 
}
L'activité principale (programme test):
TestDialogsActivity.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
package ca.clubgps.TestDialogs;
 
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
 
 
public class TestDialogsActivity extends Activity implements DlgConfirmEvent
{
 
   @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
     // Test dialogue message
    Button btShowMessage = (Button) findViewById(R.id.btShowMessage);
    btShowMessage.setOnClickListener(new View.OnClickListener() {
      public void onClick(View view) 
      {
        DialogMes dlgMes = new DialogMes( TestDialogsActivity.this,"Message","life is good") ;                
      }  
    }); 
 
    // Test dialogue confirmation
    Button btConfirm= (Button) findViewById(R.id.btConfirm);
    btConfirm.setOnClickListener(new View.OnClickListener() {
      public void onClick(View view) 
      {
        DialogConfirm dlgMes = new DialogConfirm(TestDialogsActivity.this,"Confirmation","is it?",1) ;   
 
      }  
    });  
  }
 
 public void OnDlgConfirm(boolean yesPressed,int dlgID)
 {
   String mes ;
   if (yesPressed) 
     mes = "Ok pressed" ;
   else
     mes = "Cancel pressed" ;
   DialogMes dlgMes = new DialogMes( TestDialogsActivity.this,"RESULT",mes) ;
 
 }    
}
main.xml:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />
   <Button
        android:id="@+id/btShowMessage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ShowMessage" />
    <Button
        android:id="@+id/btConfirm"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Confirm" />
</LinearLayout>
Un gros merci, j'apprécie d'avance l'aide que vous allez m'apporter pour éventuellement devenir l'un des vôtres!