我在setTag(String tagName)
课程中找不到类似Fragment
方法的内容。设置Fragment
标记的唯一方法是执行FragmentTransaction
并将标记名称作为参数传递。
这是通过代码显式设置Fragment
标记的唯一方法吗?
答案 0 :(得分:109)
是。所以唯一的方法是在交易时间,例如使用add
,replace
或作为布局的一部分。
我通过对兼容性来源的检查确定了这一点,因为我在过去的某些时候曾简要地寻找类似的内容。
答案 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"
答案 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);