2016-05-05 18 views
1

Ich möchte eine Aktivität basierend auf der Eingabe der vorherigen Aktivität dynamisch starten. I-Eingang haben eine Schnur durch die vorherige Tätigkeit, das einzige, was diese spezifischen Code, um den FehlerAndroid: Eine Aktivität dynamisch starten

wirft nicht Konstruktor ‚Intent (com.MentalMathWorkout.EasyCountDown, java.lang.String)‘ lösen

Gibt es eine Weg, um das zu machen?

public class EasyCountDown extends AppCompatActivity { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_ecd); 

    Intent intent = getIntent(); 
    String test = intent.getStringExtra(MainActivity.TEST_TYPE); 
    String cstring = ".class"; 
    final String activity = test.concat(cstring); 

    Intent intent = new Intent(EasyCountDown.this, activity); 
    startActivity(intent); //Start test 
} 
+0

EasyCountDown erbt von ...? – eduyayo

+0

Ich denke du könntest es mit Java Reflection versuchen. Oder implementieren Sie eine statische Methode in jeder Aktivität mit der nächsten Aktivität oder einem Satz von Aktivitäten, um durch einen Parameter jeder von ihnen zu wählen, komplexe Enum wäre eine andere Option ... Es gibt eine Menge Möglichkeiten wirklich. – Dani

+2

Dies ist eine kühlere Lösung, aber warum können Sie nicht einen einfachen Schalter verwenden? – Nanoc

Antwort

4

Das Objekt Component tut genau das:

String activity = intent.getStringExtra(MainActivity.TEST_TYPE); 
Intent intent = new Intent(this, new ComponentName(this, activity)); 
startActivity(intent); 

Das this ist eine Instanz Activity ist vorausgesetzt. (für eine Fragment, verwenden Sie getActivity(), obv.)

0

Ich habe eine Klasse hier:

com.yasinkacmaz.newproject.activity.ProfileActivity 

Mein Test-String wie folgt aus:

"com.yasinkacmaz.newproject.activity.ProfileActivity" 

Und es gute Arbeit:

public class EasyCountDown extends AppCompatActivity { 
    final Activity thisActivity = this; 
    private Intent previousIntent,nextIntent; 

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

     previousIntent = getIntent(); 
     String test = previousIntent.getStringExtra(MainActivity.TEST_TYPE); 
     final String activity = test; 
     Class newclass = null; 

     try { 
      newclass = Class.forName(activity); 
     } catch (ClassNotFoundException c) { 
      c.printStackTrace(); 
     } 

     if(newclasss != null) { 
      nextIntent = new Intent(thisActivity, newclass); 
      startActivity(nextIntent); 
     } else { 
      Toast.makeText(getApplicationContext(),"new class null",Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

Dont Sie vergessen Verwenden Sie Schaltergehäuse oder usw., weil in diesem Fall So erhalten Sie ClassNotFoundException und Ihre Absicht wird null sein.

+1

Sie brauchen hier überhaupt kein cstring. Und extra TEST_TYPE sollte init mit ' .class.getCanonicalName()' – Raiv

+0

ich gelöscht .class Erweiterung und es funktioniert gut, danke –

+0

@tommus, warum meine starke Zeichenfolge zu löschen, gibt es wichtige Nachricht war dort :( –

Verwandte Themen