2013-04-26 81 views
0

我有一個數據庫有許多活動的類名獲得類,例如因爲意圖不起作用開始新的活動由一個String

Intent myActivity = new Intent(CurrentClass.this, activityName); 

需要一個類,而不是一個帶類名的字符串,

我怎麼能通過String activityName獲取類?

我想避免宣佈太多的意圖,只使用我在運行時需要的意圖。

+0

您可以將.cl​​ass作爲參數傳遞給您的方法 – 2013-04-26 20:31:31

+0

不,我不能,因爲我從數據庫中獲取名稱類作爲字符串。 – AndreaF 2013-04-26 20:32:36

回答

0

您可以加載使用反射類,如:

public startNewActivity(String activityName){ 
    try { 
     Class<?> clazz = Class.forName(getPackageName() +"." +activityName); 

     Intent myActivity = new Intent(CurrentClass.this, clazz); 
     startActivity(myActivity); 

    } catch (Exception e) { 
     Log.e("TAG","Error: " +e.getStackTrace()); 
    } 
} 

如果您提供完整的類名(包括包名),你不需要撥打getPackageName()

希望這會有所幫助..乾杯!

3
Class<?> clazz = Class.forName("yourPackage.YourActivityName"); 

Intent myActivity = new Intent(CurrentClass.this, clazz); 

例子:

Class <?> clazz = Class.forName("com.test.testActivity"); 
1

我怎麼能獲得通過字符串activityName類?

我想你需要的東西是這樣的:

Class<?> target = Class.forName(<yourPackage>.ActivityName); 
Intent i = new Intent(Caller.this, target); 

在你的情況,你需要從數據庫字符串從0至點位置上獲得。

僞代碼:

String stringFromDb = "Activity1Name.class"; 
int i = stringFromDb.lastIndexOf("."); 
String actName = stringFromDb.subString(0, i); 
Class<?> target = Class.forName(<package> + "." + actName); // getPackageName() 
Intent i = new Intent(Caller.this, target); 
0

只需將字符串轉換爲活動名稱即可。 This答案可能是您的問題解決方案。希望這可以幫助。