1
我的應用程序有幾個活動,以及「開始活動」按鈕列表。我爲此創建了一個自定義視圖。爲了不需要處理點擊處理程序和切換語句,我可以在佈局的XML文件中設置custom:start_activity=".OtherActivity"
屬性。檢查動態創建的類是否爲活動
當然,很好的計劃。但我必須爲此提供錯誤檢測。 start_activity
中的鍵入的字符串必須是有效的類名,並且該類必須是Activity
的子項。 OtherActivity
是AppCompatActivity
的子類的類的子類。
這是我已經試過:
String name = array.getString(R.styleable.MyView_start_activity);
if (name == null)
throw new IllegalArgumentException("name attribute must be set.");
final String className = context.getPackageName() + activity;
try {
Class<?> check = Class.forName(className); //, false, getClass().getClassLoader()); // create only at click later
if (!Activity.class.isInstance(check))
throw new IllegalArgumentException(className + " is not a valid activity.");
} catch (ClassNotFoundException e) {
throw new IllegalArgumentException(className + " is not a valid class.");
}
然而,isInstance
總是返回false,所以它拋出異常的所有時間。我也試過isAssignableFrom
,以及不同的參數/類變體。給定的字符串是一個有效的類,不會拋出ClassNotFoundException
,並且在調試器中,我可以在check
的超類樹中看到Activity
。我不知道,我做錯了什麼?
'ClassA instanceof ClassB' –
會使用if(check instanceof Activity)嗎? –
沒有。 'instanceof'做了一個靜態檢查,所以我不能使用它。 '類>'不能在編譯時被鑄造。 – klenium