Dmi*_*nko 33 containers android android-fragments android-view
我添加了一个片段
transaction.add(R.id.content, fragment, null);
我需要从这个开始新的片段.但要做到这一点,我需要知道第一个片段的容器视图ID(在我的例子中是R.id.content).我怎么能得到这个?
我可以直接使用这个id,但我想片段不应该知道有关父活动的这类细节.例如,在这种情况下,不可能在另一个活动中使用此片段.
可能是从另一个"起始"片段是一个不好的做法,所有片段处理逻辑应该由活动本身处理?但是创建好的片段序列相互启动似乎非常有用(例如detalView-> moreDetailView-> evenMoreDetailView).
Beh*_*çar 77
您可以通过调用访问容器的ID
((ViewGroup)getView().getParent()).getId();
Spa*_*rky 12
Dunno,如果我完全理解你的问题,但你在onCreateView中得到了Container.我想你可以把它存放在一个局部变量中.
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.
假设您mCurrentFragment在Activity类中有Fragment实例.您可以通过获取Fragment的容器View
int id = mCurrentFragment.getView().getParent().getId();
ViewGroup vg = (ViewGroup) findViewById(id); // Fragment's container View
| 归档时间: | 
 | 
| 查看次数: | 68046 次 | 
| 最近记录: |