我没有setTag(String tagName)
在Fragment
类中找到类似方法的东西。设置Fragment
我发现的标签的唯一方法是执行FragmentTransaction
并将标签名称作为参数传递。
这是Fragment
通过代码显式设置标签的唯一方法吗?
我没有setTag(String tagName)
在Fragment
类中找到类似方法的东西。设置Fragment
我发现的标签的唯一方法是执行FragmentTransaction
并将标签名称作为参数传递。
这是Fragment
通过代码显式设置标签的唯一方法吗?
Answers:
是。因此,唯一的方法是在交易时,例如使用add
,replace
或作为布局的一部分。
我通过检查兼容性源来确定这一点,因为我在过去的某个时候曾短暂地寻找类似的东西。
您可以通过以下方式将标签设置为片段:
Fragment fragmentA = new FragmentA();
getFragmentManager().beginTransaction()
.replace(R.id.MainFrameLayout,fragmentA,"YOUR_TARGET_FRAGMENT_TAG")
.addToBackStack("YOUR_SOURCE_FRAGMENT_TAG").commit();
您可以在活动布局xml文件中提供标签。
供应 android:tag attribute
唯一的字符串。
就像您在布局xml中分配ID一样。
android:tag="unique_tag"
这是我发现的最好方法:
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年了,但是如果有人遇到同样的问题,请像我一样做:
创建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);
您可以将标签添加为Fragment
参数的属性。如果碎片被销毁,然后由OS重新创建,它将自动恢复。
例子:-
final Bundle args = new Bundle();
args.putString("TAG", "my tag");
fragment.setArguments(args);