web-dev-qa-db-ja.com

フラグメントでのonConfigurationChangedの使用

私はこのコードを断片的に持っています

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を使用してそれを行うことに本当に興味があります

私はどんな助けにも感謝します。

よろしくお願いします

15
Sergio76

onCreateViewFrameLayoutを作成します-これはfragmenViewのコンテナです。次に、R.layout.testoneを作成し、それをframeLayoutに追加します。

onConfigurationChanged clear 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);
}

これで、すべてが希望どおりに機能します。

31
Nik