如何通过代码设置Fragment标签?


137

我没有setTag(String tagName)Fragment类中找到类似方法的东西。设置Fragment我发现的标签的唯一方法是执行FragmentTransaction并将标签名称作为参数传递。

这是Fragment通过代码显式设置标签的唯一方法吗?

Answers:


118

是。因此,唯一的方法是在交易时,例如使用addreplace或作为布局的一部分。

我通过检查兼容性源来确定这一点,因为我在过去的某个时候曾短暂地寻找类似的东西。


2
您的答案位于[此处] [1]在stackoverflow [1]上:stackoverflow.com/questions/9363072/android-set-fragment-id
SME

2
使用FragmentTransaction的add(int containerViewId,Fragment片段,String标记),如下所示:stackoverflow.com/a/13244471/4002895 @PJL请编辑您的答案。此答案误导人们
dasar 2014年

那很不方便。
伊恩·旺巴

75

您可以通过以下方式将标签设置为片段:

Fragment fragmentA = new FragmentA();
getFragmentManager().beginTransaction()
    .replace(R.id.MainFrameLayout,fragmentA,"YOUR_TARGET_FRAGMENT_TAG")
    .addToBackStack("YOUR_SOURCE_FRAGMENT_TAG").commit(); 

7
我在哪里使用此代码?在FragmentPagerAdapter中的getItem中?
Dr.jacky 2014年

35

您可以在活动布局xml文件中提供标签。

供应 android:tag attribute唯一的字符串。

就像您在布局xml中分配ID一样。

    android:tag="unique_tag"

链接到开发人员指南


32
如果使用布局文件,那将起作用。但是,这个问题涉及在Java中动态设置标签。
IgorGanapolsky

1
这就是我需要的答案,因为有时在使用某些库时,您无法控制片段事务,因此无法以编程方式设置标签。谢谢!
RJFares '16

3

您还可以像这样获得所有片段:

对于v4香水

List<Fragment> allFragments = getSupportFragmentManager().getFragments();

对于应用程序片段

List<Fragment> allFragments = getFragmentManager().getFragments();

0

这是我发现的最好方法:

   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");
        }
    }
}

-1

我知道已经有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);


-22

您可以将标签添加为Fragment参数的属性。如果碎片被销毁,然后由OS重新创建,它将自动恢复。

例子:-

    final Bundle args = new Bundle();
    args.putString("TAG", "my tag");
    fragment.setArguments(args);

我明白你的意思。谢谢!
devhermluna

你得到了什么?!这不是你如何设置一个标签的片段不是由一个长镜头
法里德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.