我没有在setTag(String tagName)
类中找到类似Fragment
方法的东西。设置我找到的Fragment
标签的唯一方法是通过执行FragmentTransaction
并将标记名称作为参数传递。
这是通过代码显式设置Fragment
标记的唯一方法吗?
是。所以唯一的方法是在交易时间,例如使用add
,replace
,或作为布局的一部分。
我通过检查兼容性来源确定了这一点,因为我在过去的某些时候曾简要地查找类似内容。
您可以通过以下方式将标记设置为片段:
Fragment fragmentA = new FragmentA();
getFragmentManager().beginTransaction()
.replace(R.id.MainFrameLayout,fragmentA,"YOUR_TARGET_FRAGMENT_TAG")
.addToBackStack("YOUR_SOURCE_FRAGMENT_TAG").commit();
您可以在活动布局xml文件中提供标记。
“为android:tag属性提供唯一的字符串。”
就像在布局xml中分配id一样。
android:tag="unique_tag"
你也可以得到这样的所有片段:
前进的碎片
List<Fragment> allFragments = getSupportFragmentManager().getFragments();
对于app.fragment
List<Fragment> allFragments = getFragmentManager().getFragments();
我知道它是在6年前,但如果有人面临同样的问题就像我做的那样:
- 使用标记字段创建自定义
Fragment
类:
public class MyFragment extends Fragment {
private String _myTag;
public void setMyTag(String value)
{
if("".equals(value))
return;
_myTag = value;
}
//other code goes here
}
- 在将片段添加到
sectionPagerAdapter
之前设置标签就像这样:
MyFragment mfrag= new MyFragment();
mfrag.setMyTag("TAG_GOES_HERE");
sectionPagerAdapter.AddFragment(mfrag);
这是我找到的最好方法:
public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
// Let's first dynamically add a fragment into a frame container
getSupportFragmentManager().beginTransaction().
replace(R.id.flContainer, new DemoFragment(), "SOMETAG").
commit();
// Now later we can lookup the fragment by tag
DemoFragment fragmentDemo = (DemoFragment)
getSupportFragmentManager().findFragmentByTag("SOMETAG");
}
}
}
您可以将标记添加为Fragment
参数的属性。如果片段被销毁然后由OS重新创建,它将自动恢复。
例:-
final Bundle args = new Bundle();
args.putString("TAG", "my tag");
fragment.setArguments(args);