2013-11-27 26 views
0

在onCreate完成之前,Android是否開始處理屏幕觸摸?我使用setContentView,然後初始化一些東西,如果我真的很快,並且在活動打開後選擇一個列表項,我會得到一個空指針,並且這隻有在變量尚未初始化時纔會發生。看起來,觸摸是在setContentView被調用關於onCreate尚未完成之後得到處理的,這是一個真實的事實嗎?這對我來說似乎很奇怪。onCreate完成之前的Android觸摸事件?

我寫了一個簡單的例子,所以你知道我的意思:

public class MainActivity extends FragmentActivity implements MainFragment.OnListItemSelected { 

private List<String> mList; 

@Override 
public void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    ... 
    initialize(); 
    ... 
} 

private void initialize() { 
    mList = new ArrayList{1,2,3}; 
} 

@Override 
public void onListItemSelected(final int id) { 
    do something with mList -> NullPointer if this called before initialize() was called 
} 

}

+0

將代碼粘貼到這裏 –

+0

這個問題不需要代碼 – David

回答

0

您是否嘗試過在你的代碼來實現ViewTreeObserver?

http://developer.android.com/reference/android/view/ViewTreeObserver.html

vto = convertView.getViewTreeObserver(); 
       vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
        public void onGlobalLayout() { 
         v.getViewTreeObserver().removeOnGlobalLayoutListener(this); //vet inte om denna metod är nödvändig 

        } 
       }}); 
+0

不,我用代碼示例更新了我的問題 – David

0

如果你看到你的清單 - 這意味着你是遠遠超出onCreate()上的活動的生命週期。 所以這個NullPointer不是由於initialize()沒有被調用。 您還可以在initialize(),onCreate()onResume()上添加日誌輸出,並親自查看。

+0

這是邏輯假設,爲什麼我發現這個NulPointerException非常奇怪。我會再看看我的代碼。 – David

+0

如果您需要進一步幫助解決此問題,您必須發佈代碼和堆棧跟蹤 – Vaiden