2016-07-20 4 views
2

Ich möchte nicht neue Activity für jede Aufgabe erstellen, wie die Geschäftslogik von benutzerdefinierten Fragment bereits behandelt wird. Es ist eine allgemeine Layout:Generic Zweck Fragment Aktivität

<FrameLayout .. > 
    <LinearLayout .. 
    android:id="@+id/fragment" /> 
</FrameLayout> 

ich generic Activity schaffen wollte, die es verwenden würde und von einer bestimmten Fragment initialisiert werden.

public class LeliFragmentActivity extends LeliBaseActivity { 
public static final String KEY_FRAGMENT = BuildConfig.APPLICATION_ID + ".FRAGMENT"; 

protected void onCreate(Bundle state) { 
    super.onCreate(state); 
    setContentView(R.layout.activity_with_fragment); 

    Fragment fragment = (Fragment) getIntent().getSerializableExtra(KEY_FRAGMENT); 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    transaction.replace(R.id.fragment, calcFragment); 
    transaction.commit(); 
} 

public static void start(Context c, LeliBaseFragment fragment) { 
    Intent intent = new Intent(c, LeliFragmentActivity.class); 
    intent.putExtra(KEY_FRAGMENT, fragment); 
    c.startActivity(intent); 
} 

Aber ich fühle, dass dies kein guter Weg ist. Passing Fragment in der Intent scheint mir als Overkill. All diese Serialisierung ist teuer. Ich könnte stattdessen den Klassennamen weitergeben. Oder gibt es einen besseren Weg? Oder soll ich einen Activity für jeden haben (Vollbild) Fragment? Danke für den Hinweis.

+1

Warum möchten Sie das 'Fragment' an eine neue' Aktivität' übergeben? Würde es nicht trotzdem neue/andere Informationen anzeigen? Warum nicht einfach ein neues 'Fragment' in der neuen' Activity' instanziieren und dann die Daten, die das neue 'Fragment' benötigt, in der' Absicht' übergeben? – Bryan

+1

Ja, ich finde das schwer zu beantworten, weil es keinen Sinn ergibt. Für welchen Anwendungsfall versuchen Sie zu lösen? Weil es vielleicht nichts mit dem aktuellen Lösungspfad zu tun hat, sind Sie – CQM

+0

Ich möchte nicht viele kopierte Aktivitäten haben, die sich nur durch den Namen des Fragments unterscheiden. –

Antwort

1

Erste

können Sie eine Activity für ganzes Projekt verwenden, wenn es bequemer für Sie und Projekt ist nicht zu groß. Aber wenn Projekt groß ist und viele Fragment s enthält, ist es besser, sie in logische Reihenfolge für verschiedene Aktivitäten zu teilen. Zum Beispiel LoginActivity wird alle sing/Registrierung Fluss mit vielen Fragment s darstellen. Als LeliFragmentActivity mit allen Fragment s benötigt

Zweite

Sie müssen nicht Ihre Fragment s miteinander passieren. Um die Kommunikation zwischen Fragment die beste und einfachste Art, intrefaces wie Dokumentation zu verwenden, sagt.

Eine andere Möglichkeit zur Kommunikation sind Event-Bus-Bibliotheken wie EventBus oder Otto.

+0

Danke für eine Antwort, aber meine Absicht war anders.Ich wollte nicht eine aufgeblähte Aktivität mit Dutzenden von Wenn-sonst haben. Ich wollte eine einfache Aktivität haben, die einmal ChartsFragment und dann BadgesFragment oder LoginFragment rendert. –

+0

@LeosLiterak Was ist das Problem damit? –

+0

siehe meine Diskussion mit @ Bryan –