Приложение Android закрывается при нажатии кнопки «Назад»

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

public class MainActivity extends Activity implements TabListener {
    Fragment f = null;
.....

    public void onTabSelected(Tab tab, FragmentTransaction ft) {

        .....

        if (tab.getPosition() == 0) {
            if (initalSync == true) {
                progress1.setVisibility(TRIM_MEMORY_UI_HIDDEN);
            }
            f = new EventFragment();
            Bundle data = new Bundle();
            data.putInt("idx", tab.getPosition());
            f.setArguments(data);

        }
        if (tab.getPosition() == 1) {
            progress1.setVisibility(TRIM_MEMORY_UI_HIDDEN);
            f = new MapsFragment();
            Bundle data = new Bundle();
            data.putInt("idx", tab.getPosition());
            f.setArguments(data);

        }
        .....    
        ft.replace(android.R.id.content, f);

    }

Когда я когда-либо нажимаю кнопку возврата телефона на любом из фрагментов, мое приложение закрывается. Я знаю, что это связано с обратным стеком, но каждый метод, который я пробовал, терпит неудачу.

есть идеи?


person user2229747    schedule 28.02.2014    source источник
comment
Можете ли вы опубликовать ошибку?   -  person Zhenxiao Hao    schedule 28.02.2014
comment
нет ошибки при запуске приложения, только когда я нажимаю кнопку «Назад», и все приложение закрывается   -  person user2229747    schedule 28.02.2014
comment
dropbox.com/s/w6es9y1o12wy02g/log.txt   -  person user2229747    schedule 28.02.2014


Ответы (2)


Вам нужно добавить свои фрагменты в задний стек, если вы не хотите, чтобы действие закрывалось к тому времени, когда вы нажмете назад, все, что вам нужно сделать, это вызвать следующий метод:

ft.addToBackStack(null)

прежде чем заменить и зафиксировать транзакцию. Таким образом, используемая вами инъекция фрагментов будет отслеживаться, а кнопка «Назад» изменится на предыдущий фрагмент до достижения первого действия, а затем закроет приложение.

С уважением!

person Martin Cazares    schedule 28.02.2014
comment
Я добавил эту строку прямо над оператором ft.replace, и это привело к сбою приложения. - person user2229747; 28.02.2014
comment
вы не создаете свою собственную транзакцию, не так ли? вы используете тот, который исходит от обратного вызова, верно? - person Martin Cazares; 28.02.2014
comment
да вот в чем проблема? если да, то как я могу это исправить? - person user2229747; 28.02.2014
comment
посмотрите на 3-й ответ на этот вопрос, похоже, именно то, что вы пытаетесь сделать, запрещено. stackoverflow.com/questions/8231161/ - person Martin Cazares; 28.02.2014
comment
так что моя кнопка назад бесполезна - person user2229747; 28.02.2014
comment
не совсем, если у вас есть активность перед этой в бэкстеке, вы будете отправлены на эту активность - person Martin Cazares; 28.02.2014

Вам нужно вызвать addToBackstack(null) в транзакции, чтобы добавить фрагмент в стопку. Затем кнопка «Назад» должна вернуться к предыдущему фрагменту.

person Robby Pond    schedule 28.02.2014
comment
Вы должны вызвать его после вызова замены. - person Robby Pond; 28.02.2014