如何获取视图的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;
}
} );
}
}
编辑:我无法以任何我知道的方式访问任何Fragment
- 对象。也许有一种隐藏的方式,但正是因为我的要求!
下一次编辑:(之后只是为了完成问题)我正在使用Google支持套餐!
PS:我不想给太多涉及的信息,因为这是一个普遍的问题,需要一般的答案,偶尔会出现。
答案 0 :(得分:3)
好吧,我知道这是我自己的错误。我认为它必须是一个名为getFragmentManager()
的函数,但确实是错误。
因为我使用Googles支持包,所以正确的函数被称为getSupportFragmentManager()
。
但是必须说有一个很大的陷阱,因为在Fragment
内部,即使使用支持包,也可以使用Fragment
函数getFragmentManager()
但在{{1}内部它突然FragmentActivity
。
我承认这是一个很大的耻辱,特别是我认为这不是必要的信息,我使用支持包。我认为这会让问题更加笼统,但我发现我永远不会保留任何信息。对于未来的问题:)
答案 1 :(得分:0)
http://developer.android.com/guide/topics/fundamentals/fragments.html
在代码中创建片段,并按照为活动分配视图的方式为其分配视图。要将片段添加到XML中,请使用您在代码中创建的片段。
即
<fragment android:name="com.example.news.ArticleReaderFragment"
android:id="@+id/viewer"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent" />
然后在你的代码中,给它一个视图
public static class ExampleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.example_fragment, container, false);
}
}
现在您的代码片段已经存在,您可以使用:
getActivity().getFragmentManager();
getActivity
是获取Activity
所属Fragment
的简写。有可能Fragment
未附加Activity
。
因此,请等到onActivityCreated或查看getActivity是否为空。