2016-06-29 21 views
0

Ist es möglich, einen einzigen OnClickListener zu einem AlertDialog zuzuweisen? HierAndroid mehrere Dialoge zu einem OnClickListener

sind die Dialoge selbst:

 AlertDialog.Builder dialog1 = new AlertDialog.Builder(PrefActivity.this); 
     dialog1.setTitle("Dialog 1"); 
     dialog1.setPositiveButton("ok" , myListener); 

     AlertDialog.Builder dialog2 = new AlertDialog.Builder(PrefActivity.this); 
     dialog2.setTitle("Dialog 2"); 
     dialog2.setPositiveButton("ok" , myListener); 

Und hier ist der Hörer:

 DialogInterface.OnClickListener myListener = new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       switch (???){ 
        case dialog1: 
        break; 

        case dialog2: 
        break; 
       } 
      } 
     }; 

Was soll ich in dieser switch-case Anweisung schreibe korrekt zu bestimmen, welcher Dialog ausgewählt wurde?

+0

Was diese Art und Weise ist Zweck des Dialoges sein wird? –

+0

versuchen Sie, 'Dialog' zu Ihrer' switch() 'Anweisung zu übergeben. – SripadRaj

+0

Sathish, weil ich nicht die gleichen 'OnClickListeners' schreiben möchte, die sich nur um eine Zeile unterscheiden. – Alex

Antwort

1

Sie den Dialog nicht direkt zeigen, bauen einen Dialog und weisen Sie auf eine Variable wie:

dialog1 = new AlertDialog.Builder(PrefActivity.this); 
dialog1 = builder1.create(); 
dialog2 = new AlertDialog.Builder(PrefActivity.this); 
dialog2 = builder2.create(); 

setzen die gleichen listners

new DialogInterface.OnClickListener() { 
@Override 
public void onClick(DialogInterface dialog, int which) { 
     if(dialog == dialog1){ 
      //Dialog 1 
     } else if(dialog == dialog2) { 
      //Dialog 2 
     } 
} 
+0

Danke, das ist es was ich brauche. Es gibt keine Möglichkeit, es mit 'switch-case' anstatt mit' if-else' zu ​​überprüfen. – Alex

+0

Ich glaube nicht. Ich habe es noch nicht mit Switch versucht. Aber Sie können es mit switch (dialog.hashCode()) versuchen und dialog1.hashcode() in switch cases verwenden. –

-1

1.Simply eine neue Klasse dh erstellen myListener und implementieren DialogInterface.OnClickListener Schnittstelle

2. Konstruktor mit int Argument erstellen

3.PASS Bezug einer neuen Klasse statt Schnittstelle und Pass int Arguments, das die spätere Verwendung in Schaltern statemnt d.h dialog.setPositiveButton("OK",new myListener(int))

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
static int dialog1 = 1; 
static int dialog2 = 2; 
Button button, button2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    button = (Button) findViewById(R.id.button); 
    button2 = (Button) findViewById(R.id.button2); 

    button.setOnClickListener(this); 
    button2.setOnClickListener(this); 
} 

@Override 
public void onClick(View view) { 
    if (view == button) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Dialog 1"); 
     builder.setMessage("this is first dialog"); 
     builder.setPositiveButton("ok", new myListener(dialog1)); 
     builder.show(); 
    } 
    if (view == button2) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Dialog 2"); 
     builder.setMessage("this is second dialog"); 
     builder.setPositiveButton("ok", new myListener(dialog2)); 
     builder.show(); 
    } 
} 


class myListener implements DialogInterface.OnClickListener { 
    int dialogNo; 

    public myListener(int dialogNo) { 
     this.dialogNo = dialogNo; 


    } 

    @Override 
    public void onClick(DialogInterface dialogInterface, int i) { 
     switch (dialogNo) { 
      case 1: 
       Toast.makeText(MainActivity.this, "Dialog first", Toast.LENGTH_SHORT).show(); 
       break; 
      case 2: 
       Toast.makeText(MainActivity.this, "Dialog second ", Toast.LENGTH_SHORT).show(); 
       break; 
     } 


    } 
} 
} 
Verwandte Themen