9

Mam ten kod we fragmencieKorzystanie onConfigurationChanged we fragmencie

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; 
    } 

} 

Co usiłuję zrobić jest to, że kiedy obrócić telefon, nie chcę metody, które należy ponownie wykonywane. Ale chcę ponownie wywołać układ xml, aby załadować xml folderu layout-land.

Kod ten nie daje żadnych błędów, po prostu nie działa i nie rozumieją przyczynę ..

Jestem bardzo zainteresowany w tym, że korzystając onConfiguratonChanged

I wdzięczni za każdą pomoc.

Dzięki i pozdrowienia

+0

Metody w twoim 'FragmentActivity' – mjosh

+0

są metody, które powinny być w fragmencie – Sergio76

+0

I dlaczego powinien działać? W "onConfigurationChanged" po prostu nadmuchaj układ i przypisz go do jednego z pól "Activity". Radziłbym użyć 'setRetainInstance (true)' zamiast metody 'onConfigurationChanged'. Jako ręczne rozwiązanie, zawsze można usunąć wszystkie widoki z 'getView()' i ponownie dołączyć nowo zawyżony układ. – Luksprog

Odpowiedz

23

W onCreateView tworzyć FrameLayout - to kontener dla Ciebie fragmenView. Następnie stwórz swój R.layout.testone i dodaj go do frameLayout.

W onConfigurationChanged jasnego FrameLayout utwórz R.layout.testone ponownie i dodać go do 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); 
} 

Teraz wszystko będzie działać tak, jak chcesz!

+0

Dzięki, świetne rozwiązanie dla mnie! –

+0

ma wiele problemów – Satheesh

+0

Sprytne rozwiązanie, zadziałało idealnie dla mnie –

Powiązane problemy