2015-05-19 2 views
2

Я застрял на этом в течение нескольких дней. У меня есть активность. Я реализовалOnBackPressed вызывает только второе нажатие

@Override 
public void onBackPressed() { 
    Log.e("TEST", "Pressed back"); 
    mAdapter.back(); 

} 

Раскладка вид пейджера и у меня есть FragmentStatePagerAdapter я расширенное управление этим. У меня есть вкладки, и я хотел управлять их историей, поэтому я реализовал логику истории, как описано в https://stackoverflow.com/a/17832632/3821037. Он работает нормально, но по какой-то причине после того, как я нажму, чтобы изменить вкладку и нажать кнопку андроида назад, первый раз, когда я нажимаю, не регистрируется - он не вызывает действие OnBackPressed. Второй звонок работает отлично. Кто-нибудь знает, к чему идет первое событие? Я должен сказать, что я никогда не покидаю такую ​​же деятельность. я могу также увидеть первое событие регистрируется

05-20 12:44:17.952: I/ViewRootImpl(22749): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_BACK, scanCode=0, metaState=0, flags=0x48, repeatCount=0, eventTime=8406029, downTime=8406029, deviceId=-1, source=0x101 } to com.android.internal.policy.impl.PhoneWindow$DecorView{428bba20 V.E..... R....... 0,0-1080,1776} 

Но я не уверен, какой объект получает (я также пытался добавить слушателя на представлении фрагмента и ViewPager, а также все родители корневой вид активности - ничего не получает).

спасибо.

ответ

0

Проблема заключается в том, что каждый раз, когда вы сохраняете историю в стек, вы добавляете значение int, которое вы собираетесь использовать. Когда вы нажимаете кнопку «Назад», вы видите, что она использует onBackPressed(), но ничего не делает, потому что она всплывает/перемещается по истории добавления вкладки, в которую вы сейчас находитесь.

Когда вы переходите от вкладки 2 к 3. В стек добавляется вкладка 3.

Если вы нажали кнопку «Назад» в этом сценарии, вы перейдете на последнюю страницу, добавленную в стек, и одновременно удалите ее.

Таким образом, вы нажмете кнопку «Назад», ожидая перехода на вкладку на 2. Дело в том, что три были последними добавлены в стек, поэтому вы переходите к 3 и удаляете его, даже если вы уже на 3. next onBackPressed() вы переходите к 2 и удаляете его, как ожидалось.

Вместо использования:

if (!pageHistory.empty()) { 
    viewPager.setCurrentItem(pageHistory.pop().intValue()); 
} 

попробовать:

if (pageHistory.size()>1){ 
    pageHistory.pop().intValue(); 
    viewPager.setCurrentItem(pageHistory.peek()); 
} 
Смежные вопросы