2017-04-01 43 views
0

我正在查看Cheesesquare來學習一些新的設計工具,並且我遇到了一些讓我想知道的代碼。代碼找到一個視圖,然後在繼續其設置之前檢查它是否爲空。什麼時候應該在執行之前檢查一個視圖!= null?

爲什麼視圖會返回null,假設它存在並且id匹配?

我相信寫這段代碼的人的專業知識,我認爲這不是一個錯誤,但它的目的是什麼?什麼時候應該檢查空值,什麼時候不需要?

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    if (navigationView != null) { 
     setupDrawerContent(navigationView); 
    } 

    ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
    if (viewPager != null) { 
     setupViewPager(viewPager); 
    } 

...

private void setupViewPager(ViewPager viewPager) { 
    Adapter adapter = new Adapter(getSupportFragmentManager()); 
    adapter.addFragment(new CheeseListFragment(), "Category 1"); 
    adapter.addFragment(new CheeseListFragment(), "Category 2"); 
    adapter.addFragment(new CheeseListFragment(), "Category 3"); 
    viewPager.setAdapter(adapter); 
} 

private void setupDrawerContent(NavigationView navigationView) { 
    navigationView.setNavigationItemSelectedListener(
      new NavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(MenuItem menuItem) { 
      menuItem.setChecked(true); 
+0

例如:如果在此佈局中缺少id爲nav_view的視圖,則findViewById(R.id.nav_view)方法返回null。 –

+0

你不得不問克里斯爲什麼他對這些'View'進行了無效檢查,而不是所有其他的檢查。你可能會注意到課堂上還有TODO評論,所以它可能不是一個完整的,精美的項目。也許他打算實現不同的肖像和風景佈局。也許這只是一個調試助手。也許完全是另一回事。我們無法確定。 –

回答

0

除了其他答案,我只想提一點。因爲我們不知道這個代碼庫的全部內容,所以我假設這個用戶正在編寫他/她的代碼以實現模塊化。有時候我們可能想要動態添加視圖,綁定的時機使我們保持謹慎。在這些情況下,我們希望確保我們要加載的視圖不爲null。例如:

+0

接受這個答案,因爲它是唯一一個不重複我已經提到的問題。我想我只是不會使用if語句,直到我自己發現錯誤並有理由使用它。 – Vinnie

0

的觀點將返回null,不管出於什麼原因,findViewById(R.id.nav_view)返回null。例如,如果缺少nav_view,就會發生這種情況。由於該函數可能返回null,因此檢查空值以避免NullPointerException

0

使用下面提到的代碼的主要目的是確保viewPager在設置之前永遠不會返回空值,這將導致應用程序崩潰。使用此代碼的用戶正在嘗試使用代碼進行安全操作,並確保應用程序按預期工作,並且在任何情況下都不會因viewPager返回空值而崩潰。

if (viewPager != null) { 
    setupViewPager(viewPager); 
} 
相關問題