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

dzjeubhm  于 9个月前  发布在  Android
关注(0)|答案(8)|浏览(132)

我在Fragment类中没有找到类似setTag(String tagName)方法的东西。我发现的设置Fragment标记的唯一方法是执行FragmentTransaction并将标记名称作为参数传递。
这是通过代码显式设置Fragment标记的唯一方法吗?

tyky79it

tyky79it1#

是的。所以唯一的方法是在交易时,例如。使用addreplace或作为布局的一部分。
我通过检查兼容性来源来确定这一点,因为我在过去的某个时候简要地寻找过类似的来源。

z3yyvxxp

z3yyvxxp2#

你可以通过这种方式将tag设置为fragment:

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

yquaqz183#

您可以在活动布局xml文件中提供一个标记。
android:tag attribute提供唯一的字符串。
就像在布局xml中分配id一样。

android:tag="unique_tag"

链接到开发人员指南

fykwrbwg

fykwrbwg4#

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

对于v4碎片

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

对于app.fragment

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

byqmnocz5#

这是我找到的最好的方法:

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

btxsgosb6#

现在有一种更简单的方法来实现这一点,如果你使用的是DialogFragment(而不是Fragment):

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

在后台,show()方法确实创建了一个FragmentTransaction,并使用add()方法添加了标记。但在我看来,使用show()方法要方便得多。
你也可以把它缩短为Fragment,使用Kotlin Extension:)

mf98qq94

mf98qq947#

我知道这是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);
tnkciper

tnkciper8#

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

  • 示例 :-
final Bundle args = new Bundle();
    args.putString("TAG", "my tag");
    fragment.setArguments(args);

相关问题