9

Ich habe diesen Code in einem Fragmentdie Verwendung in einem Fragment

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

} 

Was ich versuche zu tun ist, onConfigurationChanged dass, wenn ich das Telefon drehen, ich will nicht die Methoden erneut ausgeführt werden. Aber ich möchte noch einmal das xml-Layout aufrufen, um das xml des Layout-Land-Ordners zu laden.

Dieser Code keine Fehler geben, funktioniert einfach nicht und versteht nicht, den Grund ..

Ich bin wirklich daran interessiert, es zu tun onConfiguratonChanged Verwendung

ich jede Hilfe dankbar.

Danke und Grüße

+0

die Methoden in Ihrer 'FragmentActivity' – mjosh

+0

gibt es Methoden, die im Fragment sein sollten – Sergio76

+0

Und warum sollte es funktionieren? In 'onConfigurationChanged' bläst man einfach ein Layout auf und weist es einem der Felder der 'Activity' zu. Ich würde Ihnen raten, 'setRetainInstance (true)' anstelle von 'onConfigurationChanged' zu verwenden. Als eine manuelle Lösung denke ich, dass Sie immer alle Ansichten von 'getView()' entfernen und das neu aufgeblähte Layout wieder anbringen können. – Luksprog

Antwort

23

In onCreateViewFrameLayout schaffen - das ist der Behälter für Sie fragmenView. Dann erstellen Sie Ihre R.layout.testone und fügen Sie sie zu frameLayout hinzu.

In onConfigurationChanged löschen FrameLayout, erneut R.layout.testone erstellen und zu frameLayout hinzufügen.

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

Jetzt wird alles funktionieren, wie Sie wollen!

+0

Danke, großartige Lösung für mich! –

+0

es hat viel problem – Satheesh

+0

Kluge Lösung, funktionierte perfekt für mich –

Verwandte Themen