如何通过代码设置片段标签?

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

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

200272 次浏览

是的,所以唯一的方法是在事务处理时,例如使用 addreplace,或者作为布局的一部分。

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

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

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

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

    android:tag="unique_tag"

开发指南链接

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

示例 :-

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

你可以这样设置标记为片段:

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

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

为了 V4的片段

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

应用程序片段

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

我知道已经过去6年了,但是如果有人面临同样的问题,就像我一样:

创建一个带有标记字段的自定义 Fragment Class:

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

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

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

在底层,show()方法确实创建了一个 FragmentTransaction,并使用 add()方法添加了标记。但在我看来,使用 show()方法要方便得多。

你也可以通过使用 Kotlin 分部:)来缩短 Fragment