android fragment 加入栈,请教一个关于Fragment栈的问题

该博客探讨了如何在Android应用中实现主界面点击返回键直接退出APP的功能。作者尝试了多种方法,包括清空Fragment回退栈、在主界面onBackPressed中判断并结束所有Activity,以及使用启动模式singleTop或singleTask,但未能成功。内容涉及到Fragment的管理、Activity的生命周期以及Android应用的退出逻辑,同时展示了部分关键代码片段。
摘要由CSDN通过智能技术生成

现在大致的流程见图,想实现功能的是:不管开启多少个Fragment,回到主界面后点击返回都是直接退出APP,返回到手机桌面.

尝试过两种方法不行,

1.在图片中新的Activity点击完成后清空所有Fragment回退栈

FragmentManager fragmentManager = getFragmentManager();

int count = fragmentManager.getBackStackEntryCount();

for (int i = 0; i < count; ++i) {

fragmentManager.popBackStack();

}

2.在主界面的onBackPress里面判断当前是否处于主界面,如果是处于主界面,就清空所有Activity,但是还没有找到怎样判断是当前主界面的方法,因为我通过Fragment一开启了Fragment二,当前也还是处于主界面;底部"首页"和"我的"模块还要存在的;

bVbrttN?w=1135&h=534

3.MainActivity使用singleTop或singleTask启动模式也无效,代码:

public class MainActivity extends BaseActivity implements View.OnClickListener {

@BindView(R.id.iv_shoot)

ImageView mShoot;

@BindView(R.id.vp_container)

NoScrollViewPager mViewPager;

@BindView(R.id.ctl_bottom_bar)

CommonTabLayout mCommonTabLayout;

private static final String TAG = "MainActivity";

private ArrayList mFragments = new ArrayList<>();

private String[] mTitles = {"工具", "用户"}; /*底部导航标题*/

private int[] mIconUncheckIds = {R.mipmap.tool_unselect, R.mipmap.user_unselect}; /*未选中的icon*/

private int[] mIconCheckedIds = {R.mipmap.tool_selected, R.mipmap.user_selected}; /*选中时的icon*/

private ArrayList mTabEntities = new ArrayList<>();

private VersionPresenter presenter = new VersionPresenter(this);

long waitTime = 2000;

long touchTime = 0;

ToolFragment toolFragment;

public static void open(Context context) {

Intent intent = new Intent(context, MainActivity.class);

context.startActivity(intent);

}

@Override

protected View initView(Bundle savedInstanceState) {

View view = View.inflate(this, R.layout.activity_main, null);

ButterKnife.bind(this, view);

frameLayout.addView(view);

mToolbar.setVisibility(View.GONE);

String uid = UserManager.getInstance().getUid();

Log.d(TAG, "initView: 1026= " + uid);

return view;

}

@Override

protected void initData() {

PermissionUtil.getPermission(this); //获取动态存储权限

toolFragment = ToolFragment.getInstance();

mFragments.add(toolFragment);

// mFragments.add(ToolFragment.getInstance());

mFragments.add(UserFragment.getInstance());

/*添加数据集*/

for (int i = 0; i < mTitles.length; i++) {

mTabEntities.add(new TabEntity(mTitles[i], mIconCheckedIds[i], mIconUncheckIds[i]));

}

mViewPager.setAdapter(new MainPagerAdapter(getSupportFragmentManager(), mFragments, mTitles));

setLayout();

//设置未读消息红点

// mCommonTabLayout.showDot(1);

presenter.checkVersion(false);//检查版本号

}

@Override

protected void initEvent() {

mShoot.setOnClickListener(this);

}

private void setLayout() {

mCommonTabLayout.setTabData(mTabEntities);

/*选择事件*/

mCommonTabLayout.setOnTabSelectListener(new OnTabSelectListener() {

@Override

public void onTabSelect(int position) {

mViewPager.setCurrentItem(position, false); //false取消切换过渡动画

// if (position == 1) {

// Toast.makeText(MainActivity.this, "选中了" + position, Toast.LENGTH_SHORT).show();

// }

}

@Override

public void onTabReselect(int position) {

}

});

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override

public void onPageSelected(int position) {

mCommonTabLayout.setCurrentTab(position);

}

@Override

public void onPageScrollStateChanged(int state) {

}

});

mViewPager.setCurrentItem(0);

}

@Override

public void onClick(View v) {

RecordActivity.open(this);

// TakePictureActivity.open(this);

}

@Override

public void onBackPressed() {

//TODO:判断当前是否是主界面,主界面退出应用

List fragments = getSupportFragmentManager().getFragments();

int size = fragments.size();

for (int i = 0; i < fragments.size(); i++) {

Fragment fra = fragments.get(i);

// Log.d(TAG, "onBackPressed: 1743" + fra);

}

// boolean visible = ToolFragment.getInstance().isVisible();

// boolean visible = toolFragment.isResumed();

View view = toolFragment.getView();

ImageView toolRecyclerView = view.findViewById(R.id.iv_task);

boolean isVisible= toolRecyclerView.getVisibility()==View.VISIBLE;

// toolRecyclerView.getLocalVisibleRect();

Log.d(TAG, "onBackPressed: 1743 = "+isVisible);

super.onBackPressed();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值