获取片段的容器视图ID

我有一个片段添加使用

transaction.add(R.id.content, fragment, null); 

我需要从这个开始新的片段。 但要做到这一点,我需要知道第一个片段的容器视图id(R.id.content在我的情况)。 我怎样才能得到这个?

我可以直接使用这个ID,但我想片段不应该知道这样的父母活动的细节。 例如,在这种情况下,将不可能在另一个活动中使用这个片段。

可能是从另一个“开始”片段是一个不好的做法,所有的片段处理逻辑应该由活动本身处理? 但创build好的片段序列看起来相当有用(例如detalView-> moreDetailView-> evenMoreDetailView)。

Solutions Collecting From Web of "获取片段的容器视图ID"

你可以通过调用访问容器的id

 ((ViewGroup)getView().getParent()).getId(); 

不知道,如果我完全理解你的问题,但你在onCreateView的容器。 我想你可以把它藏在一个局部variables中。

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mContainer = container; ... } 

我认为有一个更标准的方式来访问视图,而不是使用

 ((ViewGroup) getView().getParent()).getId() 

我将假定你正在使用一个MainActivity来呈现一个列表片段,这个列表片段可以在单击一个项目时呈现另一个列表片段,等等。 我假设你已经select用你提供的列表片段的内容replaceMainActivity的主视图。

由于每个列表片段都被托pipe在MainActivity中,所以您始终可以访问MainActivity的视图。

 // Inside of onListItemClick... FragmentManager fm = getFragmentManager(); Fragment fragment = new MyOtherListFragment(); FrameLayout contentView = (FrameLayout) getActivity().findViewById(R.id.content_view); fm.beginTransaction() .replace(contentView.getId(), fragment) .addToBackStack(null) .commit(); 

上面的例子假定你有一个在MainActivity中设置的XML布局资源,调用XML资源R.layout.activity_main,其中有一个Frame.Rayout,ID为R.id.content_view。 这是我采取的方法。 我在这里展示的例子是我在应用程序中实际编写的一个简单版本。

顺便说一句,我的IntelliJ版本(版本1.0.1)警告我

 ((ViewGroup) getView().getParent) 

可能会抛出一个NullPointerException。

假设在Activity类中有Fragment实例mCurrentFragment 。 你可以通过获取Fragment的容器视图

 int id = mCurrentFragment.getView().getParent().getId(); ViewGroup vg = (ViewGroup) findViewById(id); // Fragment's container View