青春须早为,岂能长少年。这篇文章主要讲述如何使用ById或ByTag在android中获取当前片段相关的知识,希望能为你提供帮助。
在我的主要活动中,我有一个framelayout,用于显示现在想象的片段,我有3个片段对象:
Fragment1 f1 = new Fragment1();
Fragment2 f2 = new Fragment2();
Fragment3 f3 = new Fragment3();
我使用以下方法设置此片段:
fragTrans.replace(android.R.id.content, f1);
fragTrans.addToBackStack(null);
fragTrans.commit();
现在在不同的时间点,应用程序可能在framelayout中有三个片段之一(片段数量可能不同)。
所以,在某些时候,如果我想确定哪个片段当前显示在framelayout中,我该怎么做呢?
我的目的:fragment2有2个状态,其中布尔状态可以是true或false,如果状态为true,按下后退按钮我想做某事并将状态设置为false,如果背面被按下我'll调用super.onBackPressed()但是如果它设置为true并且当前片段3是可见的,首先我要转到片段2,然后将状态更改为false,然后将super.onBackPressed()
如果我可以识别出哪个片段当前可见,那将使它成为一块蛋糕
答案
您的解决方案在这里1.首先用这条线替换片段替换线。
fragTrans.replace(android.R.id.content, f1,f1.getClass.getName());
在这里
f1.getClass,getName()
是当前片段的关键。它给你的片段名称替换或当前替换片段。FragmentManager manager = getSupportFragmentManager();
Fragment1 fragment1 = (Fragment1) manager.findFragmentByTag(Fragment1.class.getName());
Fragment2 fragment2 = (Fragment2) manager.findFragmentByTag(Fragment2.class.getName());
Fragment3 fragment3 = (Fragment3) manager.findFragmentByTag(Fragment3.class.getName());
if (fragment1 != null) {
Log.e(TAG, "Current fragment is Fragment1");
}else if(fragment2 != null) {
Log.e(TAG, "Current fragment is Fragment2");
}else if(fragment3 != null) {
Log.e(TAG, "Current fragment is Fragment3");
} else {
Log.e(TAG, "Fragment 1-2-3 is null");
}
如果你第一次在onBackPress上做某事请按照下面的代码,
@Override
public void onBackPressed() {
if (isBackPress) { //Default is false
super.onBackPressed();
} else {
// On First time click do something
isBackPress=true;
}
}
另一答案【如何使用ById或ByTag在android中获取当前片段】试试这个
Fragment fragment = (Fragment)supportFragmentManager.findFragmentById(R.id.fragment_container)
推荐阅读
- 无法将整数强制转换为android.support.design.widget.FloatingActionButton
- 带有列表的android Recyclerview相互重叠
- React,Redux和Immutable.js(高效Web应用程序的组成部分)
- 响应式设计不足,我们需要响应式性能
- BEM方法论简介
- 如何使用Rails助手(Bootstrap轮播演示)
- PHP 7简介(新增功能和已消失的功能)
- 跨页面重新加载的持久数据(Cookie,IndexedDB及其之间的所有内容)
- GWT工具包(使用Java构建强大的JavaScript前端)