【问题标题】:Using onConfigurationChanged in a fragment在片段中使用 onConfigurationChanged
【发布时间】:2013-06-14 20:16:11
【问题描述】:

我在片段中有这段代码

public class TestOne extends Fragment {

    View view = null;

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
      super.onConfigurationChanged(newConfig);

      LayoutInflater inflater2 = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater2.inflate(R.layout.testone, null); 

        Toast.makeText(getActivity(), "Rotate fragment", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Toast.makeText(getActivity(), "onCreate Fragment", Toast.LENGTH_SHORT).show();

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.testone, null); 

        Toast.makeText(getActivity(), "onCreateView fragment", Toast.LENGTH_SHORT).show();

        return view; 
    }

}

我想要做的是,当我旋转手机时,我不希望再次执行这些方法。但我想再次调用 xml 布局,加载 layout-land 文件夹的 xml。

这段代码没有给出任何错误,只是不起作用,不明白原因..

我真的对使用 onConfiguratonChanged 来做这件事很感兴趣

感谢您的帮助。

感谢和问候

【问题讨论】:

  • FragmentActivity中的方法
  • 片段中应该有方法
  • 为什么它应该起作用?在onConfigurationChanged 中,您只需扩充布局并将其分配给Activity 的字段之一。我建议您使用 setRetainInstance(true) 而不是 onConfigurationChanged 方式。作为手动解决方案,我想您始终可以从 getView() 中删除所有视图并重新附加新膨胀的布局。
  • 我已经搜索过但找不到任何显示如何使用 setRetainInstance (true) 的示例。用它好不好?
  • 请具体描述它是如何失败的。 “只是不起作用”不是很清楚。

标签: android android-fragments screen-rotation onconfigurationchanged


【解决方案1】:

onCreateView 中创建FrameLayout - 这是你的容器fragmenView。然后创建您的R.layout.testone 并将其添加到frameLayout

onConfigurationChanged清除FrameLayout,再次创建R.layout.testone并将其添加到frameLayout

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
{
    frameLayout = new FrameLayout(getActivity());
    LayoutInflater inflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = inflater.inflate(R.layout.testone, null);
    frameLayout .addView(view);
    return frameLayout; 
}

@Override
public void onConfigurationChanged(Configuration newConfig) 
{
    super.onConfigurationChanged(newConfig);
    frameLayout. removeAllViews();
    LayoutInflater inflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = inflater.inflate(R.layout.testone, null);
    frameLayout .addView(view);
}

现在一切都会如你所愿!

【讨论】:

  • 谢谢,对我来说很好的解决方案!
  • 它有很多问题
  • 干得好!
猜你喜欢
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
相关资源
最近更新 更多