使用场景,主界面底部由radiogroup包含四个radiobutton负责切换三个fragment和一个跳转到activity的界面;
现在第二个是跳转到activity,而不是使用viewpager切换,但是从新的activity返回的时候,会出现,显示跳转前的fragment,而底下radiobutotn没切换到原fragment位置。
因此,处理在跳转到新的activity的时候,记录当前viewpager的item,在返回的时候,在resume处主动调用radiogroup的check:
private static int lastClick = 0; private void performClick(int lastClick){ Log.d(TAG, "initView:performClick " + lastClick); switch (lastClick){ case 0: mRobotHomeRg.check(R.id.robot_select_rb); toMessageFlag = false; break; case 1: break; case 2: mRobotHomeRg.check(R.id.robot_parents_care_rb); toMessageFlag = false; break; case 3: mRobotHomeRg.check(R.id.robot_message_rb); toMessageFlag = false; break; default: break; } }
然后发现,出现了新的问题,返回的时候,虽然在resume调用了performClick,而lastClick也是前一个界面item,但是,按back的时候会在resume处调用performClick,然后在rediogroup处的setOnCheckedChangeListener,还是直接进入了跳转到新activity的处理,而不是切换到旧的fragment,直到进入新activity后,第二次按back,才会实现效果,切换到旧的fragment,由于时间问题,留待后面处理,现在紧急处理方法是:
在跳转到新activity的时候,添加一个标志位:toMessageFlag,在跳转的时候置true,在返回,切换到旧fragment的时候置false,当为true的时候判断还没完成返回,直接break,避免再次跳入新activity。
if (toMessageFlag) break; toMessageFlag = true; lastClick = mViewPager.getCurrentItem(); Log.d(TAG, "initView: " + lastClick);
private static Boolean toMessageFlag = false;