0

Ich möchte eine Activity von einer Fragment starten, wenn ich eine Taste auf der letzten, aber ich bekomme ein leeres Layout anstelle des Layouts, das der Activity zugeordnet ist.Wie kann ich eine Aktivität von einem Fragment starten?

Ich nenne die Fragment von MainActivity.class wie folgt aus:

FragmentManager mFragmentManager = getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); 
fragmentTransaction.replace(R.id.mainContent,new FragmentMain()).commit(); 

Und auf FragmentMain Klasse Ich habe eine onClick Methode wie folgt:

@Override 
public void onClick(View v) { 
    Intent intent = new Intent(getActivity(), FinalClass.class); 
    getActivity().startActivity(intent); 
} 

aber das Ergebnis ist ein leeres Layout und keine Fehler gezeigt auf dem logcat. Ich habe für ähnliche Verhaltensweisen im Web gesucht und ich fand einige Lösungen, die nicht mein Problem beheben:

Ich habe keine Methode addToBackStack() auf meinem Projekt so dass diese Lösung funktioniert nicht für mich arbeiten.

getActivity().startActivity(myIntent) ist die akzeptierte Antwort.

Die Art und Weise, wie sie die Aktivität aus dem Fragment starten, ändert sich nicht von der Art, wie ich sie verwende.

Jede der angebotenen Lösungen für mich gearbeitet.

PS: Ich habe die Activity auf der Manifest.xml Datei deklariert:

<activity 
     android:name=".FinalClass" 
     android:screenOrientation="portrait" 
     android:label="Final Class" 
     android:icon="@mipmap/ic_launcher" 
     android:theme="@style/AppTheme.NoActionBar" /> 

PS2: nicht fragen Zweifeln, wenn Sie mehr Code benötigen (Ich habe versucht, es zu vereinfachen auf das konzentrieren, Problem).

Was kann ich tun, um zu vermeiden, dass die Activity mir ein leeres Layout anstelle des Layouts Activity gibt?

Vielen Dank im Voraus!

+0

haben alle Ansichten im Layout von 'FInalClass' Aktivität? –

+0

Nur eine Randnotiz, nicht sicher, ob 'getActivity(). StartActivity()' aus einem Fragment eine gute Übung ist. Ich würde vorschlagen, eine Schnittstelle zu verwenden, die Ihre Aktivität implementiert, und dann eine Methode auf der Schnittstelle von Ihrem Fragment aufrufen. Dann starten Sie Ihre Aktivität von Ihrer Aktivität. obwohl Denken Sie nicht, es zu einem Problem zu tun hat .. – vkislicins

+0

@BurhanuddinRashid Ich habe folgendes: 'öffentliche Ansicht onCreateView (LayoutInflater inflater, Viewgroup Behälter, Gebündelt savedInstanceState) { final Ansicht inflaterFinalClass = inflater.inflate (R.layout.activity_final_class , Null); return inflaterFinalClass; ' –

Antwort

1

Stellen Sie Ihr Layout in Aktivitäten wie dies in onCreate

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_final_class); 
} 

onCreateView für Aktivität

nicht verwenden
0

können Sie verwenden onCreateView Methode dann diesen Code verwenden es auch helfen ...

Intent intent = new Intent(getActivity(), FinalClass.class); 
getActivity().startActivity(intent); 

// Closing all the Activities 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

// Add new Flag to start new Activity 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
+0

Dies hat keine Änderungen. Ich habe die Lösung. Trotzdem danke! :) –

+0

benutze noch einmal das wird auch perfekt laufen ich benutze dies –

0

Endlich fand ich die Lösung. Ich habe die falsche onCreate-Methode verwendet.

Vorher hatte ich:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     final View inflaterFinalClass = inflater.inflate(R.layout.activity_final_class, null); 
     return inflaterFinalClass; 

aber ich verwenden sollte:

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_final_class); 
} 

So, zum Schluss war ich für eine Aktivität statt der onCreate Methode, um die onCreate Verfahren für ein Fragment mit .

+0

Das ist was ich antwortete –

+0

@BurhanuddinRashid Oh, sorry. Ich habe es geschrieben und deine Antwort nicht gesehen, aber dein Kommentar weist mich darauf hin, die Lösung zu finden, als ich erkannte, dass es das Problem bei der Art war, wie ich die Aktivität erstellte. –

+0

@BurhanuddinRashid Ja, ich konnte es immer noch nicht akzeptieren. Jetzt habe ich es getan. Wie auch immer, ich werde meine Antwort aufrechterhalten. Vielleicht kann es auch mehr Menschen helfen. –

1

Sie können keine Aktivität aus Fragment mit Fragment instance starten. Sie können jedoch eine Aktivität mit Fragmentcontainer-Aktivitätsinstanz starten. Für zB: Lassen Sie uns sagen Aktivität A mit Fragment Abc, so müssen Sie die Instanz von Aktivität A nicht Fragment abc verwenden.

Dadurch wird kein Effekt in Ihrem vorherigen Fragment sein, da es sich oben auf Ihrer Aktivität befindet, anstatt vorhandenes Fragment zu ersetzen oder hinzuzufügen. Wenn Sie einige Änderungen in bestehenden Fragment wollen tun, dann haben Sie onActivityResult

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
    } 

außer Kraft zu setzen:) GlbMP

Verwandte Themen