android: Как я могу закрыть фрагмент, когда пользователь касается его снаружи?

Привет всем =) Я новый разработчик Android, и мне нужна помощь по удалению фрагмента.

В моем приложении есть фрагмент входа, и когда пользователь касается его снаружи, я хочу скрыть фрагмент входа. Как я могу это сделать? Метод OnTouchEvent() может быть полезен или нет?

Пожалуйста, скажи что-нибудь. Спасибо =)


person Sultan Zeybek    schedule 04.12.2012    source источник
comment
Если вы используете DialogFragment, вы можете использовать ответ, размещенный здесь: stackoverflow.com/questions/8404140   -  person dymmeh    schedule 04.12.2012
comment
Спасибо, но это не DialogFragment..   -  person Sultan Zeybek    schedule 04.12.2012
comment
Почему бы вам не использовать диалоговый фрагмент? кажется, что в любом случае это имело бы больше смысла, поскольку вы хотите, чтобы он отображался как диалог и вел себя как один.   -  person dymmeh    schedule 04.12.2012
comment
да, это кажется более полезным, я пробовал, но мое приложение вылетает с ошибкой, недопустимое состояние, исключение с фрагментом диалога.   -  person Sultan Zeybek    schedule 04.12.2012


Ответы (3)


поместите макет входа в прозрачный полноэкранный макет и обнаружьте сенсорные события на более крупном макете.

person Steelight    schedule 04.12.2012

Я думаю, что лучший способ - удалить фрагмент, чтобы освободить ресурсы памяти.

Мое решение имеет этот метод во фрагменте:

private void closeFragment() {
        getActivity().getSupportFragmentManager().beginTransaction().remove(YOUR_FRAGMENT.this).commit();
    }
person Hesam    schedule 03.06.2013

Привет еще раз =) я решаю эту проблему, используя OnTouchListener на моей домашней странице. У меня есть фон gridviews в макете моей домашней страницы, и если пользователь не входит в систему, запускается метод onTouch(). Когда фрагмент входа виден, и пользователь касается вне его мой метод hideLoginFragment(), вызывающий удаление фрагмента..

gridView = (ShelvesView) findViewById(R.id.grid_shelves);
gridView.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                        if (application.getDbManager().getUser().key.equals("-1")){
                    hideLoginFragment();
                    loginButton.setVisibility(View.VISIBLE);
                    exitButton.setVisibility(View.INVISIBLE);}
                return false;
            }
        });
person Sultan Zeybek    schedule 05.12.2012