2016-05-05 23 views
1

以前のアクティビティの入力に基づいてアクティビティを動的に開始したいと考えています。私は唯一のものは、この特定のコードがAndroid:動的にアクティビティを開始する

がコンストラクタ「テント(com.MentalMathWorkout.EasyCountDown、java.lang.String)を」解決できないエラーがスローされる前の活動を通して、文字列、

は、入力をありきこの仕事をする方法?

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は...から継承されていますか? – eduyayo

+0

私はあなたがJava Reflectionを試すことができると思います。または、次のアクティビティやアクティビティの各アクティビティで1つの静的メソッドを実装して、それぞれ1つのパラメータを選択することができます。複雑な列挙型は別のオプションです...実際には多くの可能性があります。 – Dani

+2

これはよりクーラーな解決策ですが、シンプルなスイッチケースを使用できないのはなぜですか? – Nanoc

答えて

4

コンポーネント名のオブジェクトは、まさにそれを行います。thisActivityのインスタンスであると仮定しています

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

。 (Fragmentの場合、getActivity()、obv。を使用)

0

私はここでクラスを持っています。

com.yasinkacmaz.newproject.activity.ProfileActivity 

そのような私のテスト文字列:

"com.yasinkacmaz.newproject.activity.ProfileActivity" 

そして、それは良い作業:

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

いけないことができます忘れスイッチケースなどを使用してください。あなたはClassNotFoundExceptionを得ることができ、あなたの意向はnullになります。

+1

ここではcstringはまったく必要ありません。そして、余分なTEST_TYPEは ' .class.getCanonicalName()'でinitにする必要があります。 – Raiv

+0

削除された.class拡張子はありがたいです。 –

+0

@tommusなぜ私の強い文字列を削除するか、重要な注意がそこにありました:( –

関連する問題