获取片段的容器视图ID

我添加了一个片段

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

我需要从这个开始新的片段。 但要做到这一点,我需要知道第一个片段的容器视图ID(在我的例子中是R.id.content)。 我怎么能得到这个?

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

可能是从另一个“起始”片段是一个坏习惯,所有片段处理逻辑应该由活动本身处理? 但是创建好的片段序列相互启动似乎非常有用(例如detalView-> moreDetailView-> evenMoreDetailView)。

您可以通过调用访问容器的ID

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

Dunno,如果我完全理解你的问题,但你在onCreateView中得到了Container。 我想你可以把它存放在一个局部variables中。

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

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

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

我将假设你正在使用一个MainActivity来呈现一个列表片段,然后在点击一个项目时可以显示另一个列表片段,依此类推。 我假设您已选择将MainActivity的主视图替换为您呈现的列表片段的内容。

由于每个列表片段都在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,其中有一个带有ID为R.id.content_view的FrameLayout。 这是我采取的方法。 我在这里提供的示例是一个比我在应用程序中实际编写的更简单的版本。

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

 ((ViewGroup) getView().getParent) 

可能会抛出NullPointerException。

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

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