2016-07-29 15 views
2

Ich habe die folgende Methode und ich möchte eine Snackbar zeigen. Das Problem ist, ich habe meine Aktivität nicht view und ich weiß nicht, wie man es bekommt. Im Code sehen Sie, dass Snackbar viewviewInflate_setup ist, aber es funktioniert nicht. Ich weiß, dass es nicht funktioniert, weil dies die Ansicht von meinem alertdialog und nicht meinem aktuellen Bildschirm ist. Ich habe versucht, die root view, aber dann die snackbar wird an der falschen Stelle (hinter diesen drei Android-Tasten) angezeigt. Wie bekomme ich meine Aktivierung View?Wie bekommt man die Ansicht?

public void confirmPassword(){ 
     final LayoutInflater inflateSetup = getLayoutInflater(); 
     final View viewInflate_setup = inflateSetup.inflate(R.layout.inflate_setup, null); 

     AlertDialog.Builder alertSetup = new AlertDialog.Builder(this); 
     alertSetup.setView(viewInflate_setup); 
     final AlertDialog dialogSetup = alertSetup.create(); 
     dialogSetup.show(); 

     btnConfirmPassowod = (Button)viewInflate_setup.findViewById(R.id.btnConfirm); 
     btnConfirmPassowod.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(final View v) { 
       System.out.println("User has clicked the [confirm] button"); 
       dialogSetup.setCancelable(false); 
       edtPassword3 = (EditText)viewInflate_setup.findViewById(R.id.edtPassword3); 
       SUpassword3 = edtPassword3.getText().toString(); 

       final ParseUser beforeConfirmPassword = ParseUser.getCurrentUser(); 
       ParseUser.logInInBackground(beforeConfirmPassword.getUsername(), SUpassword3, new LogInCallback() { 
        @Override 
        public void done(ParseUser parseUser, ParseException e) { 
         if(e==null){ 
          //password confirmed, go to next setup 
          System.out.println("Password [" +SUpassword3+ "] and user [" +beforeConfirmPassword.getUsername()+ "] confirmed, go to setup"); 
          dialogSetup.dismiss(); 
         }else{ 
          //passwords don't match 
          System.out.println("Password don't match: [" +SUpassword3 + "] USER [" +beforeConfirmPassword.getUsername()+ "]"); 
          Snackbar.make(viewInflate_setup, "Wrong password. Try again.", Snackbar.LENGTH_LONG) 
            .setAction("Action", null).show(); 
          dialogSetup.dismiss(); 
         } 
        } 
       }); 
      } 
     }); 
    } 
+1

In welcher Art von Klasse ist diese Methode? –

+1

Ich gehe davon aus, dass dies eine Aktivität ist, in der Sie die Funktion geschrieben haben. In diesem Fall können Sie dem Root-Layout Ihrer activity.xml-Datei ein 'android: id'-Attribut hinzufügen und dann' findViewById (R.id.root_layout_id) 'verwenden, um die Ansicht zu erhalten. Sie können die Root-Ansicht Ihrer Aktivität auch über 'findViewById (android.R.id.content)' abrufen. – wanpanman

+0

Das habe ich @wanpanman gemacht. Vielen Dank. –

Antwort

4

Das einzige, was Sie brauchen, ist eine id von Ihnen Stammansicht und erstellen Sie eine Instanz davon eingestellt.

activity_main.xml

<LineaLayout 
    ... 
    android:id="my_root"> 
    ... 

</LinearLayout> 

MainActivity

private LinearLayout mRootView; 
onCreate(...){ 
    ... 
    mRootView = (LinearLayout) findViewById(R.id.my_root); 
    ... 
} 

Und in der Sie alert Dialog nur eine snackbar erstellen wie:

Snackbar.make(mRootView, "Wrong password. Try again.", Snackbar.LENGTH_LONG).setAction("Action", null).show(); 
+3

Was ist mit 'mRootView = findViewById (android.R.id.content)'? –

+0

Das wusste ich nicht, Mann! es ist wirklich toll. Vielen Dank! – Robert

+1

Alle Antworten auf diesen Beitrag funktioniert. Danke an alle. –

5

gut Sieverwenden könnenoder getWindow().getDecorView(), um eine Grundansicht Ihrer Aktivität zu erhalten

d. H. Snackbar.make(findViewById(android.R.id.content), "Wrong password. Try again.", Snackbar.LENGTH_LONG).show(); wird die Aufgabe erledigen.

+0

Sie haben Recht. Vielen Dank. –

Verwandte Themen