Skip to content

Commit

Permalink
优化首页界面如果因为内存不足等特殊原因导致界面重启,再次恢复界面时,优化tab滑动事件失效的问题
Browse files Browse the repository at this point in the history
  • Loading branch information
hht20 committed Oct 11, 2022
1 parent 1561119 commit f5a3058
Showing 1 changed file with 44 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,12 @@ public class MainActivity extends AppCompatActivity {
* 跳转到设置界面
*/
private static final int REQUEST_CODE_SETTING = 101;
/**
* 界面屏幕方向切换\切换别的界面时 会触发onSaveInstanceState
* 会存储该key的值设置为true
* 然后在恢复界面时根据该值进行相应处理
*/
private static final String IS_SAVE_INSTANCE_STATE = "IS_SAVE_INSTANCE_STATE";

/**
* 底部控件
Expand Down Expand Up @@ -103,7 +109,13 @@ protected void onCreate(Bundle savedInstanceState) {
return;
}
setContentView(R.layout.activity_main_zjh);
requestPermissions();
requestPermissions(savedInstanceState);
}

@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(IS_SAVE_INSTANCE_STATE, true);
}

@Override
Expand Down Expand Up @@ -147,7 +159,7 @@ protected void onActivityResult(int requestCode, int resultCode, @Nullable Inten
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_SETTING) {
// 因为权限一直拒绝后,只能跑到系统设置界面调整,这个是系统设置界面返回后的回调,重新验证权限
requestPermissions();
requestPermissions(null);
}
}

Expand Down Expand Up @@ -217,25 +229,29 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis
if (permissionsLength > 0) {
requestPermissionsDialog();
} else {
requestPermissions();
requestPermissions(null);
}
}
}
}

/**
* 初始化,在权限全部通过后才进行该初始化
*
* @param savedInstanceState 恢复的数值
*/
private void init() {
private void init(Bundle savedInstanceState) {
if (!mIsInit) {
ViewPager2 mVpPager = findViewById(R.id.viewPager);
mTabLayout = findViewById(R.id.tableLayout);
initTabLayoutStyle();
adapterViewPager = new MyPagerAdapter(this, mSpec);
mVpPager.setAdapter(adapterViewPager);
mVpPager.setOffscreenPageLimit(3);
// 根据配置默认选第几个
mVpPager.setCurrentItem(mDefaultPosition, false);
if (savedInstanceState == null || !savedInstanceState.getBoolean(IS_SAVE_INSTANCE_STATE)) {
// 根据配置默认选第几个,如果是恢复界面的话,就不赋配置值
mVpPager.setCurrentItem(mDefaultPosition, false);
}
// 判断只有一个的时候
if (adapterViewPager.getItemCount() <= 1) {
// 则隐藏底部
Expand All @@ -248,6 +264,23 @@ private void init() {
// 禁滑viewPager
mVpPager.setUserInputEnabled(false);
}

mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
Log.d("tabLayout", "onTabSelected");
}

@Override
public void onTabUnselected(TabLayout.Tab tab) {
Log.d("tabLayout", "onTabUnselected");
}

@Override
public void onTabReselected(TabLayout.Tab tab) {
Log.d("tabLayout", "onTabReselected");
}
});
mIsInit = true;
}
}
Expand Down Expand Up @@ -275,16 +308,18 @@ private void initTabLayoutStyle() {

/**
* 请求权限
*
* @param savedInstanceState 恢复的数值
*/
private void requestPermissions() {
private void requestPermissions(Bundle savedInstanceState) {
// 判断权限,权限通过才可以初始化相关
ArrayList<String> needPermissions = getNeedPermissions();
if (needPermissions.size() > 0) {
// 请求权限
requestPermissions2(needPermissions);
} else {
// 没有所需要请求的权限,就进行初始化
init();
init(savedInstanceState);
}
}

Expand Down Expand Up @@ -341,7 +376,7 @@ private void requestPermissionsDialog() {
dialog.show();
} else {
// 没有所需要请求的权限,就进行初始化
init();
init(null);
}
}

Expand Down

0 comments on commit f5a3058

Please sign in to comment.