其他分享
首页 > 其他分享> > android-如何通过视图ID获取FragmentManager?

android-如何通过视图ID获取FragmentManager?

作者:互联网

如何获取视图的FragmentManager?

假设我有这样的布局:

<?xml version="1.0" encoding="utf-8"?>
...
<fragment android:name="com.example.MyFragment"
        android:id="@+id/thefragmentsid" >
</fragment>
...

这是我的伪代码(我知道甚至都不存在FragmentView,但我想你知道我的意思)

FragmentView fw = (FragmentView) activity.findViewById( R.id.thefragmentsid );
FragmentManager goal = fw.getFragment().getFragmentManager();

这是一个用例示例:

public class MyFragment extends Fragment{
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate( R.layout.my_fragments_view, container, false );
    }
}

public class MainActivity extends FragmentActivity{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        findViewById( R.id.thefragmentsid ).setOnTouchListener( new OnTouchListener(){
            @Override
            public boolean onTouch( View v, MotionEvent event ){
                FragmentView fw = (FragmentView) findViewById( R.id.thefragmentsid );
                FragmentManager fm = fw.getFragment().getFragmentManager();
                // Do something with the fragment manager
                return false;
            }
        } );
    }
}

编辑:我无法以任何方式访问任何片段对象.也许有一个隐藏的方法,但正是我要的!

下一步编辑:(稍后再完成问题)我正在使用Google支持包!

PS:我不想提供太多涉及的信息,因为这是一个普遍的问题,需要一个普遍的答案,并且可能偶尔出现.

解决方法:

好吧,我知道这确实是我自己的错误.我以为它必须是一个名为getFragmentManager()的函数,但这正是错误所在.

由于我使用的是Google支持包,因此正确的函数称为getSupportFragmentManager().

但是必须说有一个很大的陷阱,因为即使在带有Support Package的Fragment内部,也可以使用Fragments函数getFragmentManager(),但是在FragmentActivity内部,它突然是getSupportFragmentManager().

我承认这是极大的耻辱,尤其是我认为使用支持包不会成为必要的信息.我以为这样可以使问题更笼统,但我看不到应该保留任何信息.对于未来的问题:)

标签:android-fragments,android
来源: https://codeday.me/bug/20191202/2084690.html