2016-04-09 1 views
1

Ich möchte eine Methode zum Starten von Aktivitäten erstellen. Ich möchte nicht, dies jedes Mal schreiben:Dynamischer Intent-Parameter für Startaktivität

Intent intent = new Intent(this, LoginActivity.class); 
startActivity(intent); 

Stattdessen mag ich es wie folgt verwenden: (Unter Verwendung von 1 Zeile anstelle von 2 Linien)

ShowActivity(LoginActivity); 

Durch Verwendung eines benutzerdefinierten Verfahren wie folgt aus:

public void ShowActivity(Activity act) 
{ 
    Intent intent = new Intent(this, act.class); 
    startActivity(intent); 
} 

und vielleicht Überlastung weiter:

public void ShowActivity(Activity act, boolean finish) 
{ 
    Intent intent = new Intent(this, act.class); 
    startActivity(intent); 

    if(finish) 
     CurrentActivity.this.finish(); 
} 

Wie auch immer, es ist gibt nicht Symbol Fehler finden (ich weiß nicht, warum es kann nicht statt kann nicht durch die Art und Weise). Ist dies möglich, wenn ja, ist dies sinnvoll? (Letzter) Wenn ja, warum gibt es dafür eine 1-Linien-Methode?

Denke ich zu viel "C# ish" mit diesem Ansatz als Java noob?

Vielen Dank im Voraus.

P.S. Ich bin ein Java-und Android-Noob, so dass ich nicht sicher bin über den Titel der Frage. Ich kann nicht besser fragen, deshalb konnte ich nicht richtig suchen, wenn diese Frage dupliziert ist oder nicht. Wenn es so ist, Entschuldigung.

+0

Vielleicht eine weitere 1-line Ansatz sein kann: 'startActivity (new Intent (diese , LoginActivity.class)); 'aber es ist immer noch länger als meine Idee und hält mich nicht auf, denselben Code zu wiederholen. – ErTR

Antwort

2

definieren eine util Klasse, wie folgt vor:

public class AcitivtyUtil { 
    public static void showActivity(Activity from, Class<?> to, boolean finish) { 
     Intent intent = new Intent(from, to); 
     from.startActivity(intent); 
     if (finish) { 
      from.finish(); 
     } 
    } 
} 

dann können Sie ActivityUtil.showActivity(this, TargetActivity.class, true|false) jeder Aktivität nennen.

einige Fehler im Code:

public void ShowActivity(Activity act) // here you can't pass a Activity object as parameter, you should pass Class<?>, so it should be act.class 
{ 
    Intent intent = new Intent(this, act.class); 
    startActivity(intent); 
} 

Wenn Sie keine Verwendung util Klasse wollen, können Sie auch die showActivity() in Ihrer Aktivitätsklasse als Mitglied Methode definieren, empfiehlt es in BaseActivity definieren, so müssen Sie Dupliziere es nicht in allen Aktivitäten.

public void showActivity(Class<?> to, boolean finish) { 
    Intent intent = new Intent(this, to); 
    startActivity(intent); 
    if (finish) { 
     finish(); 
    } 
} 
+0

Danke, ich repariere diesen Teil, wie du zeigst. – ErTR

+0

Gibt es eine Möglichkeit, den ersten Parameter (* this *) innerhalb der startActivity-Methode zu verschieben und als 'ActivityUtil' zu benennen.startActivity (this, TargetActivity.class, true | false) '? – ErTR

+0

@ ErtürkÖztürk, Entschuldigung nicht sehr Ihre Frage verstehen, könnten Sie es klarer erklären? –

0

Okay, ich habe meine Antwort Ertürk bearbeitet.

Ändern Sie den Parameter Ihres Activity act-Parameters von showActivity in Intent intent und übergeben Sie den Wert von intent-params an die Intention Ihrer Methode.

Also, es zu benutzen, wird es wie:

showActivity(new Intent(this, LoginActivity.class)); 
+0

Aber welche Aktivität ist das? Wie werde ich meine LoginActivity so nennen? '' ADDENDUM: Entschuldigung es scheint, dass Sie behoben haben, ich werde diesen Kommentar löschen – ErTR

+1

Sind Sie sicher, Sie können 'neue TargetAcitivity() 'in Android ?? Acitivity wird von Android-System gesteuert, Sie können nicht, und Sie sollten nicht "neue" eine Activity! –

+1

Ich habe es bearbeitet. die neue Aktivität, die ich meinte, war Ihre Klasse wie neu LoginActivity() oder new ProductsActivity() Ich bearbeitete die Antwort –

1

Sie folgende verwenden:

public void ShowActivity(Activity act) 
{ 
    Intent intent = new Intent(this, act.getClass()); 
    startActivity(intent); 
}