[英]Generic Class Arguments in Java
所以我在我的Android應用程序中傳遞活動和意圖以處理線程(我確信有一個更好的范例,因為我的代碼開始變得惱人的意大利面 - 通常是我的標志沒做對的事)。
但無論如何,我正在嘗試做這樣的事情:
public class SomeCoolActivity extends Activity {
private class DoSomeTaskThatInvolvesEitherTheNetworkOrASleepStatementWithoutScrewingUpTheUiThread extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
// Do something useful on a non-UI thread...
return null;
}
@Override
protected void onPostExecute(Void result) {
// Now that's done, I need to progress to the next activity. If I do that here,
// I will get errors. So instead, I will call a method on my parent activity class:
loadNextActivity(NextActivity.class);
}
}
protected void loadNextActivity(Class<Activity> activityToLoad) {
startActivity(new Intent(this, activityToLoad));
}
}
但這不起作用,因為它告訴我有一個錯誤,那
NextActivity.class
不是活動。 是的,顯然它不是完全相同的類,但是人們希望我能夠傳遞任何派生自Activity的類(包括NextActivity),但不能傳遞任何沒有的類(如果我定義loadNextActivity,它實際上工作正常如
protected void loadNextActivity(Class<?> activityToLoad)
但這不太理想,因為我可以傳遞任何我想要的東西,也許是一個不是活動的東西......畢竟這是Java,而不是Ruby。 而且,如果它只允許我通過一個班級......究竟什么是好的呢?
那我該怎么做呢?
你可以寫通配符,如:
protected void loadNextActivity(Class<? extends Activity> activityToLoad)
使用Class<?>
不好的做法。 您不會知道類令牌的確切類型。 嗯,嘗試使用通配符為我的方法定義全局行為,就像我上面寫的那樣。
順便說一下,確保您添加到Manifest.xml
文件中的每個活動,例如:
<activity android:name=".com.bla.bla.YourOtherActivity" />
你的代碼評論說:“如果我在這里做,我會得到錯誤。” 你得到了什么錯誤? 你是否有一個無效的上下文作為getIntent()的參數? 或者startActivity()無效? 可能的原因是onPostExecute()是從內部類調用的,而不是Activity本身。
嘗試這個:
onPostExecute(Void result) {
Intent intent = new Intent(SomeCoolActivity.this, NextActivity.class);
startActivity(intent);
}
旁注:您不想傳遞活動, 也不想將它們保存在變量中。 如果你這樣做,你就會泄漏整個視圖層次結構,並且會快速耗盡ram。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.