Pop*_*día 50 android android-fragments
我正在使用支持库v4,我的问题是,如何知道片段是否可见?如何更改碎片中膨胀的布局的属性?提前致谢.
- -编辑 - -
我在使用FragmentActivity的android开发人员教程中使用片段
Tro*_*omB 76
您应该能够执行以下操作:
MyFragmentClass test = (MyFragmentClass) getSupportFragmentManager().findFragmentByTag("testID");
if (test != null && test.isVisible()) {
//DO STUFF
}
else {
//Whatever
}
Run Code Online (Sandbox Code Playgroud)
Y.S*_*Y.S 30
双方isVisible()并isAdded()返回true为尽快Fragment创建,甚至没有实际可见.实际工作的唯一解决方案是:
if (isAdded() && isVisible() && getUserVisibleHint()) {
// ... do your thing
}
Run Code Online (Sandbox Code Playgroud)
这样做了.期.
Kay*_*n N 21
如果您想知道何时使用正在查看您应该使用的片段
yourFragment.isResumed()
Run Code Online (Sandbox Code Playgroud)
代替
yourFragment.isVisible()
Run Code Online (Sandbox Code Playgroud)
首先isVisible()已经检查了isAdded()所以不需要同时调用它们.其次,非这两个意味着用户实际上看到了你的片段.只isResumed()确保您的片段位于用户面前,如果您正在寻找,那么用户可以与其进行交互.
Cab*_*zas 14
你可以尝试这种方式:
Fragment currentFragment = getFragmentManager().findFragmentById(R.id.fragment_container);
Run Code Online (Sandbox Code Playgroud)
要么
Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
Run Code Online (Sandbox Code Playgroud)
在这个if中,检查currentFragment是否是YourFragment的实例
if (currentFragment instanceof YourFragment) {
Log.v(TAG, "your Fragment is Visible");
}
Run Code Online (Sandbox Code Playgroud)
getUserVisibleHint() 只有当片段在视图上并且可见时才会出现
您可以像这样覆盖setMenuVisibility:
@Override
public void setMenuVisibility(final boolean visible) {
if (visible) {
//Do your stuff here
}
super.setMenuVisibility(visible);
}
Run Code Online (Sandbox Code Playgroud)
需要注意的一点是,isVisible()返回当前片段的可见状态.支持库中存在一个问题,如果您有嵌套的片段,并且隐藏了父片段(因此也隐藏了所有子片段),则子项仍然表示它是可见的.
isVisible()是最后的,所以不幸不能覆盖.我的解决方法是创建一个BaseFragment我的所有片段扩展的类,然后创建一个这样的方法:
public boolean getIsVisible()
{
if (getParentFragment() != null && getParentFragment() instanceof BaseFragment)
{
return isVisible() && ((BaseFragment) getParentFragment()).getIsVisible();
}
else
{
return isVisible();
}
}
Run Code Online (Sandbox Code Playgroud)
我这样做isVisible() && ((BaseFragment) getParentFragment()).getIsVisible();是因为我们想要隐藏任何父片段时返回false .
这似乎对我有用.
| 归档时间: |
|
| 查看次数: |
80623 次 |
| 最近记录: |