2016-07-29 4 views
2

У меня есть следующий метод, и я хочу показать Snackbar. Проблема в том, что у меня нет моей активности view, и я не знаю, как ее получить. В коде вы увидите, что Snackbar view - viewInflate_setup, но он не работает. Я знаю, что это не работает, потому что это вид из моего alertdialog, а не мой текущий экран. Я попытался получить root view, но затем snackbar показан не в том месте (за этими тремя кнопками андроида). Как получить свою активность View?Как получить вид деятельности?

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

В каком классе этот метод? –

+1

Я предполагаю, что это действие, в котором вы написали функцию. В этом случае вы можете добавить атрибут 'android: id' в корневой макет вашего файла activity.xml, а затем использовать' findViewById (R.id.root_layout_id) ', чтобы получить представление. Вы также можете получить корневой вид своей деятельности с помощью 'findViewById (android.R.id.content)'. – wanpanman

+0

Вот что я сделал @wanpanman. Благодарю. –

ответ

4

Единственное, что вам нужно, это установить id вас корневой вид и создать экземпляр.

activity_main.xml

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

</LinearLayout> 

MainActivity

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

И в вас диалог предупреждения просто создать закусочную как:

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

Как насчет 'mRootView = findViewById (android.R.id.content)'? –

+0

Я этого не знал, мужик! это действительно здорово. благодаря! – Robert

+1

Все ответы на это сообщение работают. Спасибо вам всем. –

5

хорошо вы можете использовать findViewById(android.R.id.content) или getWindow().getDecorView(), чтобы получить представление о вашей деятельности

i.e Snackbar.make(findViewById(android.R.id.content), "Wrong password. Try again.", Snackbar.LENGTH_LONG).show(); выполнит эту работу.

+0

Вы правы. Спасибо. –

Смежные вопросы