我有一個數據庫有許多活動的類名獲得類,例如因爲意圖不起作用開始新的活動由一個String
Intent myActivity = new Intent(CurrentClass.this, activityName);
需要一個類,而不是一個帶類名的字符串,
我怎麼能通過String activityName獲取類?
我想避免宣佈太多的意圖,只使用我在運行時需要的意圖。
我有一個數據庫有許多活動的類名獲得類,例如因爲意圖不起作用開始新的活動由一個String
Intent myActivity = new Intent(CurrentClass.this, activityName);
需要一個類,而不是一個帶類名的字符串,
我怎麼能通過String activityName獲取類?
我想避免宣佈太多的意圖,只使用我在運行時需要的意圖。
您可以加載使用反射類,如:
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()
。
希望這會有所幫助..乾杯!
Class<?> clazz = Class.forName("yourPackage.YourActivityName");
Intent myActivity = new Intent(CurrentClass.this, clazz);
例子:
Class <?> clazz = Class.forName("com.test.testActivity");
我怎麼能獲得通過字符串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);
只需將字符串轉換爲活動名稱即可。 This答案可能是您的問題解決方案。希望這可以幫助。
您可以將.class作爲參數傳遞給您的方法 – 2013-04-26 20:31:31
不,我不能,因爲我從數據庫中獲取名稱類作爲字符串。 – AndreaF 2013-04-26 20:32:36