2017-03-04 8 views
1

Ich schreibe diesen Code, um eine Dialogbox mit 'Ja' und 'Nein' Option erscheinen zu lassen, nachdem die 'OK' Taste gedrückt wurde. Die "Ja" sollten Benutzer zu einer "ShowResult" -Aktivität führen, wo sie die Benutzereingaben von der "Hauptaktivität" anzeigen; und das "Nein" wird nur eine Toast-Nachricht haben, die sagt "Du hast die Einreichung abgesagt."Intent überlappt das Dialogfeld?

Das Problem ist, wenn der "OK" -Button angeklickt wird, erscheint der Dialog für eine Sekunde, dann wird die Absicht angezeigt und deckt die Dialogbox ab.

Wenn ich auf "Zurück" klicke und auf "Ja" klicke, werden in der Aktivität keine Benutzereingaben angezeigt. Dies ist der Hauptaktivitätscode, mit dem ich gekämpft habe. Ich hoffe, dass ich an der ganzen Struktur nicht viel ändern werde, da dies ein Schulprojekt ist und wir einfache Techniken verwenden sollten.

Button btnOK; 
    EditText txtName; 
    EditText txtCoursename; 
    RadioButton rdnYear1; 
    RadioButton rdnYear2; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     btnOK = (Button) findViewById(R.id.btnOK); 
     btnOK.setOnClickListener(this); 
    } 
    @Override 
    public void onClick(View v) { 

     Intent intent = new Intent(this, ShowResult.class); 
     txtName = (EditText) findViewById(R.id.txtName); 
     txtCoursename = (EditText) findViewById(R.id.txtCoursename); 
     rdnYear1 = (RadioButton) findViewById(R.id.rdnYear1); 
     rdnYear2 = (RadioButton) findViewById(R.id.rdnYear2); 

     intent.putExtra("Name", txtName.getText().toString()); 
     intent.putExtra("Course Name", txtCoursename.getText().toString()); 
     intent.putExtra("Year 1", rdnYear1.isChecked()); 
     intent.putExtra("Year 2", rdnYear2.isChecked()); 


     AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
     builder.setCancelable(false); 

      switch (v.getId()) { 
      case R.id.btnOK: 
       builder.setTitle("You are submitting your data."); 
       builder.setMessage("Are you sure?"); 
       builder.setNegativeButton("No", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         Toast.makeText(getApplicationContext(), "You cancelled the submission.", Toast.LENGTH_SHORT).show(); 
        } 

       }); 
       builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         startActivity(new Intent(MainActivity.this, ShowResult.class)); 

        } 
       }); 

       builder.show(); 
      } 
    } 
} 
+0

Ausgehend von Ihrem Yes-Button-Code aus dem Alarmdialog starten Sie nicht die Absicht, die Sie erstellt haben "intent", die Ihre Extras oder Strings hat. Es sollte 'startActivity (intent)' sein. – Roljhon

+0

Ich habe gerade versucht, die StarActivity (Absicht), aber es hat nichts geändert. – Leona

Antwort

0

versuchen, die Absicht Teil im Inneren des Schaltergehäuses & setzen füge startActivity (Vorsatz);

0

Sie haben bereits am Anfang von "onClick" eine Absicht erstellt. Versuchen Sie, die gleiche Absicht zu verwenden, anstatt nach positiven Klicks ein neues zu erstellen. Auch habe ich keine Pause Erklärung in Ihrem Switch-Fall, der befolgt werden muss.

0
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        startActivity(new Intent(MainActivity.this, ShowResult.class)); 

       } 
      }); 

      builder.show(); 
     } 

hier Sie eine neue Absicht ohne Daten zu schaffen

sollten Sie Ihre zuvor erstellten Absicht verwenden, wo Sie putExtra() verwendet

Verwendung dieses:

builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 

// /////////////////////////// startActivity (Absicht); } });

  builder.show(); 
     }