2016-05-05 204 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。或者在每個活動中使用下一個活動或一組活動來實現一個靜態方法來選擇每個參數中的一個參數,複雜的枚舉將是另一個選項......真的有很多可能性。 – Dani

+2

這是一個更酷的解決方案,但爲什麼不能使用簡單的開關盒呢? – Nanoc

回答

4

該組件名稱對象做到了這一點:

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

這是假設thisActivity一個實例。 (對於Fragment,請使用getActivity(),對象)

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.getCanonicalName()' – Raiv

+0

來初始化的。我刪除了.class擴展名並且它工作的很好,謝謝 –

+0

@tommus爲什麼要刪除我的強壯的字符串,有重要的通知在那裏:( –