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

时间:2011-06-16 15:12:46

标签: android android-3.0-honeycomb android-fragments

我在setTag(String tagName)课程中找不到类似Fragment方法的内容。设置Fragment标记的唯一方法是执行FragmentTransaction并将标记名称作为参数传递。

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

8 个答案:

答案 0 :(得分:109)

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

我通过对兼容性来源的检查确定了这一点,因为我在过去的某些时候曾简要地寻找类似的内容。

答案 1 :(得分:69)

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

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

答案 2 :(得分:31)

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

“使用唯一字符串提供android:tag属性。”

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

    android:tag="unique_tag"

link to developer guide

答案 3 :(得分:4)

你也可以得到这样的所有片段:

对于v4片段

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

适用于app.fragment

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

答案 4 :(得分: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);

答案 5 :(得分: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");
        }
    }
}

答案 6 :(得分:0)

如今,如果您使用的是DialogFragment(而不是Fragment),则有一种更简单的方法来实现此目的:

val yourDialogFragment = YourDialogFragment()
yourDialogFragment.show(
    activity.supportFragmentManager,
    "YOUR_TAG_FRAGMENT"
)

在后台,show()方法确实创建了FragmentTransaction,并使用add()方法添加了标签。但我认为使用show()方法要方便得多。

您也可以使用Kotlin Extension将其缩短为Fragment:)

答案 7 :(得分:-19)

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

<强> 实施例 : -

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