2017-02-22 71 views
1

У меня есть main_activity, в котором при нажатии на кнопку я запускаю форму, чтобы завершить:ANDROID: начать новую деятельность с надутого всплывающего видом

popup= getLayoutInflater().inflate(R.layout.pop_up, null); 
    signup = new SignUp(popup); 
    register = (Button) findViewById(R.id.sign_up); 
    AlertDialog.Builder alertBuilder = new AlertDialog.Builder(MyLocalBartender.this); 
    alertBuilder.setView(popup); 
    final AlertDialog dialog = alertBuilder.create(); 
    register.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      dialog.dismiss(); 
      dialog.show(); 
     } 
    }); 

тем, что вы можете видеть, я использую вторую деятельность class (SignUp) для управления формой, а не корневым классом, из которого он был запущен (main_activity). В этом новом классе я установил все прослушиватели кликов и т. Д., Чтобы проверить входы через третий класс, который реализует OnClickListener.

Все работает нормально до этого момента. Но теперь я хочу проверить страницу/деятельность под названием HomePage, в которой пользователь должен приземлиться, если форма заполнена. Так что я не знаю, я удалить щелчок прослушиватель из предыдущего обработчика и создать анонимную один просто открыть новый вид деятельности на кнопку регистра нажатой:

//  signup_registerButton.setOnClickListener(new SignupListener(signup_emailField,signup_passwordField1, 
//    signup_passwordField2, signup_textTemp,signup_organiserRadio, signup_staffRadio,signup_alertMessage)); 
    ////*************************TEST******************* START 
    signup_registerButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent menu = new Intent(getApplicationContext(), HomePage.class); 
      startActivity(menu); 
     } 
    }); 

    ////*************************TEST******************* END 

но это возвращает NullPointerException. Я попытался запустить HomePage.class из main_activity напрямую, и он работает, а также я попытался запустить основное действие с этой кнопки REGISTER, которая не сработала, так что это говорит мне о том, что проблема где-то Вот.

+0

Мне просто удалось разобраться с проблемой, определив метод в классе main_activity, который запустил бы новую активность и вызвал бы этот метод из другого класса. Хотя я считаю, что это не правильный стиль кодирования. Любое предложение? –

ответ

1

Вам необходимо передать Контекст активности в конструктор Intent. Контекст деятельности и контекст приложений не совпадают. Контекст деятельности содержит гораздо больше информации.

В вашем случае вы можете сделать так:

signup_registerButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent menu = new Intent(yourActivity, HomePage.class); 
      startActivity(menu); 
     } 
    }); 

где yourActivity ваш экземпляр деятельности. Вы можете передать его как переменную или получить доступ к ней через main_activity.this из внутренних классов (Listeners) в любом месте вашего класса.

+0

Это не дает мне этот вариант. К слову, класс main_activity расширяет AppCompatActivity, а также активность, которая обрабатывает всплывающее окно –