我有以下问题:
我有一个 TabActivity
,它在其中一个选项卡中显示一个 FragmentActivity
。
那个 FragmentActivity
添加了一个 ListFragment
,当点击那个 ListFragment
的项目时,一个 fragment 被添加(也到后台)并且显示。
现在我需要更改该 Fragment
的布局以在横向时更改。
但我完全不知道在哪里实现该更改。我已经在 layout-land 文件夹中创建了正确的布局。但是正确的设置点在哪里呢?
最佳答案
警告:这可能是 Lollipop 之前的答案。
Fragment
不会在配置更改时重新膨胀,但您可以通过使用 FrameLayout
创建它并(重新)填充它来实现如下效果手动:
public class MyFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
FrameLayout frameLayout = new FrameLayout(getActivity());
populateViewForOrientation(inflater, frameLayout);
return frameLayout;
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
LayoutInflater inflater = LayoutInflater.from(getActivity());
populateViewForOrientation(inflater, (ViewGroup) getView());
}
private void populateViewForOrientation(LayoutInflater inflater, ViewGroup viewGroup) {
viewGroup.removeAllViewsInLayout();
View subview = inflater.inflate(R.layout.my_fragment, viewGroup);
// Find your buttons in subview, set up onclicks, set up callbacks to your parent fragment or activity here.
}
}
我对这里的 getActivity()
和相关调用不是特别满意,但我认为没有其他方法可以获取这些东西。
更新:移除了从ViewGroup
到FrameLayout
的转换并使用了LayoutInflater.from()
,第三个inflate()
的参数,而不是显式添加 View 。
关于android - 在方向更改时更改 fragment 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7442811/