fix: 修复返回主页fragment会重建

This commit is contained in:
2026-04-23 10:48:58 +08:00
parent cdc26a456c
commit cffe143544
12 changed files with 194 additions and 86 deletions

View File

@@ -17,8 +17,8 @@ android {
minSdkVersion 23
targetSdkVersion 29
versionCode 35
versionName "1.3.4"
versionCode 36
versionName "1.3.5"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

View File

@@ -145,9 +145,21 @@ public class HomeActivity extends BaseMvvmActivity<HomeViewModel, ActivityHomeBi
private List<TabBean> tabBeanLists = new ArrayList<>();
private List<Fragment> fragments = new ArrayList<>();
private MineFragment mMineFragment;
private AiFragment mAiFragment;
private ChineseFragment mChineseFragment;
private MathFragment mMathFragment;
private EnglishFragment mEnglishFragment;
private ComplexFragment mComplexFragment;
private ReadFragment mReadFragment;
private SztzFragment mSztzFragment;
private AppFragment mAppFragment;
private int defaultCurrent = 0;
private TabAdapter tabAdapter;
private TabFragmentAdapter mTabFragmentAdapter;
private static final int REQUEST_CODE_POST_NOTIFICATIONS = 100;
@@ -192,6 +204,90 @@ public class HomeActivity extends BaseMvvmActivity<HomeViewModel, ActivityHomeBi
mDeviceControlManager = new DeviceControlManager();
mAdminName = new ComponentName(this, AoleDeviceAdminReceiver.class);
mViewDataBinding.tvTime.setText(DataUtil.formatDateHour());
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
mViewDataBinding.rlTab.setLayoutManager(linearLayoutManager);
tabAdapter = new TabAdapter(tabBeanLists);
tabAdapter.setData(tabBeanLists);
tabAdapter.setOnItemClickListener(new TabAdapter.RadiaoOnItemClickListener() {
@Override
public void onSelectClick(int i) {
tabAdapter.setChoosePosition(i);
mViewDataBinding.subjectViewPager.setCurrentItem(i);
}
});
mViewDataBinding.rlTab.setAdapter(tabAdapter);
mTabFragmentAdapter = new TabFragmentAdapter(getSupportFragmentManager());
mViewDataBinding.subjectViewPager.setAdapter(mTabFragmentAdapter);
mViewDataBinding.subjectViewPager.setOffscreenPageLimit(12);
mViewDataBinding.subjectViewPager.setScrollAnim(true);
mViewDataBinding.subjectViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrollStateChanged(int i) {
}
@Override
public void onPageScrolled(int i, float f, int i2) {
}
@Override
public void onPageSelected(int i) {
tabAdapter.setChoosePosition(i);
mViewDataBinding.rlTab.scrollToPosition(i);
}
});
mMineFragment = new MineFragment();
mAiFragment = new AiFragment();
mChineseFragment = new ChineseFragment();
mMathFragment = new MathFragment();
mEnglishFragment = new EnglishFragment();
mComplexFragment = new ComplexFragment();
mReadFragment = new ReadFragment();
mSztzFragment = new SztzFragment();
mAppFragment = new AppFragment();
Log.e(TAG, "initViews: add fragment");
fragments.add(mMineFragment);
fragments.add(mAiFragment);
fragments.add(mChineseFragment);
fragments.add(mMathFragment);
fragments.add(mEnglishFragment);
fragments.add(mComplexFragment);
fragments.add(mReadFragment);
// if ("小学".equals(Util.checkGrade(SPUtils.getGrade()))) {
fragments.add(mSztzFragment);
// }
fragments.add(mAppFragment);
Log.e(TAG, "initViews: fragments size = " + fragments.size());
mTabFragmentAdapter.notifyDataSetChanged();
Log.e(TAG, "initViews: add tab bean");
tabBeanLists.add(new TabBean("我的", R.drawable.icon_tab_wd, R.drawable.icon_tab_wd_pre));
tabBeanLists.add(new TabBean("AI+学习", R.drawable.icon_tab_aixx, R.drawable.icon_tab_aixx_pre));
tabBeanLists.add(new TabBean("语文", R.drawable.icon_tab_yw, R.drawable.icon_tab_yw_pre));
tabBeanLists.add(new TabBean("数学", R.drawable.icon_tab_sx, R.drawable.icon_tab_sx_pre));
tabBeanLists.add(new TabBean("英语", R.drawable.icon_tab_yy, R.drawable.icon_tab_yy_pre));
tabBeanLists.add(new TabBean("其他学科", R.drawable.icon_tab_qtxx, R.drawable.icon_tab_qtxx_pre));
tabBeanLists.add(new TabBean("读书", R.drawable.icon_tab_ds, R.drawable.icon_tab_ds_pre));
// if ("小学".equals(Util.checkGrade(SPUtils.getGrade()))) {
tabBeanLists.add(new TabBean("素养课", R.drawable.icon_tab_syk, R.drawable.icon_tab_syk_pre));
// }
tabBeanLists.add(new TabBean("应用", R.drawable.icon_tab_lsaq, R.drawable.icon_tab_lsaq_pre));
Log.e(TAG, "initViews: tabBeanLists size = " + tabBeanLists.size());
tabAdapter.notifyDataSetChanged();
tabAdapter.setChoosePosition(defaultCurrent);
mViewDataBinding.subjectViewPager.setCurrentItem(defaultCurrent);
int agree = mMMKV.decodeInt("AgreePrivacyPolicy", 0);
if (agree == 0) {
showPolicyDialog();
@@ -199,7 +295,6 @@ public class HomeActivity extends BaseMvvmActivity<HomeViewModel, ActivityHomeBi
checkEula();
}
Log.e(TAG, "initView: getSerial = " + AdminManager.getInstance().getSerial());
Log.e(TAG, "initView: getDeviceSN = " + AdminManager.getInstance().getSerial());
Utils.getAndroiodScreenProperty(this);
@@ -244,7 +339,6 @@ public class HomeActivity extends BaseMvvmActivity<HomeViewModel, ActivityHomeBi
// ComponentName componentName = new ComponentName(JxwPackageConfig.JXW_LAUNCHER_PACKAGE_NAME, JxwPackageConfig.JXW_LAUNCHER_CLASS_NAME);
// startService(new Intent().setComponent(componentName));
}
@Override
@@ -325,43 +419,7 @@ public class HomeActivity extends BaseMvvmActivity<HomeViewModel, ActivityHomeBi
Log.e(TAG, "initViews: ");
long time = System.currentTimeMillis();
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
mViewDataBinding.rlTab.setLayoutManager(linearLayoutManager);
tabAdapter = new TabAdapter(tabBeanLists);
tabAdapter.setOnItemClickListener(new TabAdapter.RadiaoOnItemClickListener() {
@Override
public void onSelectClick(int i) {
tabAdapter.setChoosePosition(i);
mViewDataBinding.subjectViewPager.setCurrentItem(i);
}
});
mViewDataBinding.rlTab.setAdapter(tabAdapter);
mViewDataBinding.subjectViewPager.setOffscreenPageLimit(12);
mViewDataBinding.subjectViewPager.setScrollAnim(true);
mViewDataBinding.subjectViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrollStateChanged(int i) {
}
@Override
public void onPageScrolled(int i, float f, int i2) {
}
@Override
public void onPageSelected(int i) {
tabAdapter.setChoosePosition(i);
mViewDataBinding.rlTab.scrollToPosition(i);
}
});
initDatas();
Log.e(TAG, "initViews: time = " + (System.currentTimeMillis() - time) + "ms");
}
/**
@@ -747,7 +805,7 @@ public class HomeActivity extends BaseMvvmActivity<HomeViewModel, ActivityHomeBi
@Subscribe(threadMode = ThreadMode.MAIN)
public void onGkNoticeEvent(UpdateGradeEvent updateGradeEvent) {
Log.e(TAG, "onGkNoticeEvent: ");
initDatas();
initViews();
}
@Subscribe(threadMode = ThreadMode.MAIN)
@@ -771,46 +829,6 @@ public class HomeActivity extends BaseMvvmActivity<HomeViewModel, ActivityHomeBi
}
private void initDatas() {
Log.e(TAG, "initDatas: ");
long time = System.currentTimeMillis();
mViewDataBinding.tvTime.setText(DataUtil.formatDateHour());
fragments.clear();
tabBeanLists.clear();
fragments.add(new MineFragment());
fragments.add(new AiFragment());
fragments.add(new ChineseFragment());
fragments.add(new MathFragment());
fragments.add(new EnglishFragment());
fragments.add(new ComplexFragment());
fragments.add(new ReadFragment());
// if ("小学".equals(Util.checkGrade(SPUtils.getGrade()))) {
fragments.add(new SztzFragment());
// }
fragments.add(new AppFragment());
tabBeanLists.add(new TabBean("我的", R.drawable.icon_tab_wd, R.drawable.icon_tab_wd_pre));
tabBeanLists.add(new TabBean("AI+学习", R.drawable.icon_tab_aixx, R.drawable.icon_tab_aixx_pre));
tabBeanLists.add(new TabBean("语文", R.drawable.icon_tab_yw, R.drawable.icon_tab_yw_pre));
tabBeanLists.add(new TabBean("数学", R.drawable.icon_tab_sx, R.drawable.icon_tab_sx_pre));
tabBeanLists.add(new TabBean("英语", R.drawable.icon_tab_yy, R.drawable.icon_tab_yy_pre));
tabBeanLists.add(new TabBean("其他学科", R.drawable.icon_tab_qtxx, R.drawable.icon_tab_qtxx_pre));
tabBeanLists.add(new TabBean("读书", R.drawable.icon_tab_ds, R.drawable.icon_tab_ds_pre));
// if ("小学".equals(Util.checkGrade(SPUtils.getGrade()))) {
tabBeanLists.add(new TabBean("素养课", R.drawable.icon_tab_syk, R.drawable.icon_tab_syk_pre));
// }
tabBeanLists.add(new TabBean("应用", R.drawable.icon_tab_lsaq, R.drawable.icon_tab_lsaq_pre));
tabAdapter.setData(tabBeanLists);
tabAdapter.setChoosePosition(defaultCurrent);
mViewDataBinding.subjectViewPager.setAdapter(new TabFragmentAdapter(getSupportFragmentManager()));
mViewDataBinding.subjectViewPager.setCurrentItem(defaultCurrent);
Log.e(this.getClass().getSimpleName(), "initDatas: " + (System.currentTimeMillis() - time) + "ms");
}
private void hideSystemUI() {
// Enables regular immersive mode.
// For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
@@ -912,7 +930,6 @@ public class HomeActivity extends BaseMvvmActivity<HomeViewModel, ActivityHomeBi
} else {
checkEula();
checkAndRequestNotificationPermission();
}
setDefaultDesktop();
}
@@ -991,13 +1008,13 @@ public class HomeActivity extends BaseMvvmActivity<HomeViewModel, ActivityHomeBi
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
// super.onSaveInstanceState(outState);
super.onSaveInstanceState(outState);
Log.e(TAG, "onSaveInstanceState: ");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// super.onRestoreInstanceState(savedInstanceState);
super.onRestoreInstanceState(savedInstanceState);
Log.e(TAG, "onRestoreInstanceState: ");
}

View File

@@ -9,6 +9,7 @@ import com.xwad.os.R;
import com.xwad.os.activity.download.DownloadActivity;
import com.xwad.os.activity.home.HomeActivity;
import com.xwad.os.base.mvvm.BaseMvvmActivity;
import com.xwad.os.bean.UserExpireInfo;
import com.xwad.os.databinding.ActivityLoginSuccessfulBinding;
import com.xwad.os.utils.Utils;
@@ -46,6 +47,18 @@ public class LoginSuccessfulActivity extends BaseMvvmActivity<LoginSuccessfulVie
finish();
}
});
mViewModel.mUserExpireInfoData.observe(this, new Observer<UserExpireInfo>() {
@Override
public void onChanged(UserExpireInfo userExpireInfo) {
if (userExpireInfo == null) {
// mViewDataBinding.tvExpireAt.setText();
} else {
}
}
});
// mViewModel.getUserExpireInfo();
}
@Override

View File

@@ -10,6 +10,7 @@ import com.trello.rxlifecycle4.android.ActivityEvent;
import com.xwad.os.base.mvvm.BaseViewModel;
import com.xwad.os.bean.AppInfo;
import com.xwad.os.bean.BaseResponse;
import com.xwad.os.bean.UserExpireInfo;
import com.xwad.os.config.CommonConfig;
import com.xwad.os.databinding.ActivityLoginSuccessfulBinding;
import com.xwad.os.jxw.JxwPackageConfig;
@@ -41,6 +42,40 @@ public class LoginSuccessfulViewModel extends BaseViewModel<ActivityLoginSuccess
}
public MutableLiveData<UserExpireInfo> mUserExpireInfoData = new MutableLiveData<>();
public void getUserExpireInfo() {
NetInterfaceManager.getInstance().getUserExpireInfoControl()
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse<UserExpireInfo>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("getUserExpireInfo", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<UserExpireInfo> userInfoBaseResponse) {
Log.e("getUserExpireInfo", "onNext: " + userInfoBaseResponse);
if (userInfoBaseResponse.code == 200) {
UserExpireInfo userExpireInfo = userInfoBaseResponse.data;
mUserExpireInfoData.setValue(userExpireInfo);
} else {
mUserExpireInfoData.setValue(null);
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getUserExpireInfo", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e("getUserExpireInfo", "onComplete: ");
}
});
}
public MutableLiveData<Boolean> mCompleteLiveData = new MutableLiveData<>();
public void getAdminAppDownload() {

View File

@@ -0,0 +1,26 @@
package com.xwad.os.bean;
import java.io.Serializable;
public class UserExpireInfo implements Serializable {
private static final long serialVersionUID = 2733370887454572840L;
String expire_at;
int year;
public String getExpire_at() {
return expire_at;
}
public void setExpire_at(String expire_at) {
this.expire_at = expire_at;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
}

View File

@@ -43,6 +43,7 @@ import com.xwad.os.bean.SnInfo;
import com.xwad.os.bean.StudyStatBean;
import com.xwad.os.bean.SystemSettings;
import com.xwad.os.bean.UserAvatarInfo;
import com.xwad.os.bean.UserExpireInfo;
import com.xwad.os.bean.UserInfo;
import com.xwad.os.bean.VipInfo;
import com.xwad.os.bean.WhoisBean;
@@ -507,6 +508,13 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread());
}
public Observable<BaseResponse<UserExpireInfo>> getUserExpireInfoControl() {
return mRetrofit.create(UserApi.class)
.getUserExpireInfo(getToken())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Observable<BaseResponse<List<VipInfo>>> getVipListControl() {
return mRetrofit.create(UserApi.class)
.getVipList(getToken(), BuildConfig.APPLICATION_ID)

View File

@@ -20,6 +20,8 @@ public class UrlAddress {
/*用户会员信息(用于判断是否有VIP)*/
public static final String USER_INFO = "user/info";
/*获取设备过期时间*/
public static final String USER_expire_info = "user/expire-info";
/*套餐可选列表*/
public static final String VIP_LIST = "user/vip-list";
/*购买VIP下订单*/

View File

@@ -4,6 +4,7 @@ import com.xwad.os.bean.BaseResponse;
import com.xwad.os.bean.CodeBean;
import com.xwad.os.bean.OrderInfo;
import com.xwad.os.bean.PayInfo;
import com.xwad.os.bean.UserExpireInfo;
import com.xwad.os.bean.UserInfo;
import com.xwad.os.bean.VipInfo;
import com.xwad.os.network.UrlAddress;
@@ -24,6 +25,11 @@ public interface UserApi {
@Header("token") String token
);
@GET(UrlAddress.USER_expire_info)
Observable<BaseResponse<UserExpireInfo>> getUserExpireInfo(
@Header("token") String token
);
@GET(UrlAddress.VIP_LIST)
Observable<BaseResponse<List<VipInfo>>> getVipList(
@Header("token") String token,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 58 KiB

View File

@@ -87,6 +87,7 @@
android:layout_weight="1">
<TextView
android:id="@+id/tv_expire_at"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"

View File

@@ -171,7 +171,7 @@
<ImageView
android:id="@+id/iv_djjp"
android:layout_width="32dp"
android:layout_height="34dp"
android:layout_height="32dp"
android:background="@drawable/icon_wd_cr" />
<LinearLayout

View File

@@ -25,7 +25,7 @@
<string name="license_hint">如果您的许可证从经销商手中获得,您可以在本页下方的对话框中输入许可证密钥,验证成功后,即可实现许可证的开通绑定,无需重复支付</string>
<string name="license_notice">注意:请妥善保管您的许可证密钥,切勿遗失;\n许可证属于数字化虚拟商品暂不支持退换感谢您的理解与支持</string>
<string name="license_verification_successful">本机已激活成功,系统终身免费,谢谢您的使用。</string>
<string name="license_verification_successful">本机已开通成功,欢迎使用,点击确定开启学习之旅!</string>
<string name="validity_period">有效期:%d年</string>
<string name="qrcode_expiration_time">二维码过期时间%s</string>