在主Fragment中放三个Tab,主Fragment视图创建成功之后,刷新三个子tab的列表并获取当前tab所在list的总条数,更新到主Fragment的标题栏上。如果子Tab视图还没创建完成就在主Fragment中调用则会抛出空指针异常。
1.监听VIewPage 的onPageSelected事件,切换Tab的同时,调用子tab更新主Fragment的标题栏。子tab拥有更新主Fragment的方法需要持有能更新主Fragment容器的引用。
private UpdateContainerUiListener mParentFragment;
/**
* 回调到外层Fragment
*/
public interface UpdateContainerUiListener {
void updateUI(Object viewData);
}
主Fragment容器也需要实现该接口,用于子Tab在视图创建的时候获取到父容器的实例并调用父容器的标题。
private void initView(View view) {
ViewUtils.inject(this, view);
mAdvantageActivity = this.getActivity();
mRlCommon_tips.setVisibility(View.GONE);
mLinearLayoutCalendarTitleView.setVisibility(mEntranceType == 1 ? View.VISIBLE : View.GONE);
FragmentActivity parent = getActivity();
if (parent instanceof CommonActivity) {
CommonActivity activity = (CommonActivity) parent;
BaseFragment bodyFragment = activity.getBodyFragment();
if (bodyFragment instanceof UpdateContainerUiListener) {
mParentFragment = (UpdateContainerUiListener) bodyFragment;
}
}
}
子Tab主动调用更新方法
public void refresh(int position) {
mParentFragment.updateUI(new WalletTabInfoBean(position, position == 0 ? mClosedNum : position == 1 ? mServicingNum : mAbandonNum));
}
@Override
public void onClick(View v) {
if (v == mCalendar_left_arrow) {
showLoadingDialog();
DateTime dateTime = new DateTime(mYear, mMonth, 1, 0, 0, 0, 0).minus(0, 1, 0, 0, 0, 0, 0, DateTime.DayOverflow.FirstDay);
mYear = dateTime.getYear();
mMonth = dateTime.getMonth();
mCalendar_month_year_textview.setText(getDynamicDate());
WalletController.getInstance().refreshServiceTransferSiting(mUserId, mEntranceType == 1 ? mYear : 0, mEntranceType == 1 ? mMonth : 0, mEntranceType);
} else if (v == mCalendar_right_arrow) {
showLoadingDialog();
DateTime dateTime = new DateTime(mYear, mMonth, 1, 0, 0, 0, 0).plus(0, 1, 0, 0, 0, 0, 0, DateTime.DayOverflow.FirstDay);
mYear = dateTime.getYear();
mMonth = dateTime.getMonth();
mCalendar_month_year_textview.setText(getDynamicDate());
WalletController.getInstance().refreshServiceTransferSiting(mUserId, mEntranceType == 1 ? mYear : 0, mEntranceType == 1 ? mMonth : 0, mEntranceType);
}
}