2016-12-19 85 views
0

所以我有這個代碼在android(活動中的接口方法實現)該應用程序運行得很好。奇怪的範圍行爲

public void Clicks(int clickCounter) { 
    FragmentManager fragmentManager = getFragmentManager(); 
    AnotherFragment another_fragment = (AnotherFragment) fragmentManager.findFragmentById(R.id.another_fragment); 
    another_fragment.showClicks(clickCounter); 
} 

現在,當我試圖聲明fragmentManager和another_fragment作爲類變量,像這樣:

public class MainActivity extends AppCompatActivity implements FragmentInterface{ 
    FragmentManager fragmentManager; 
    AnotherFragment anotherFragment; 

    fragmentManager = getFragmentManager(); 
    anotherFragment = (AnotherFragment) fragmentManager.findFragmentById(R.id.another_fragment); 
    ... 
} 

它會導致應用程序崩潰。爲什麼這樣做?

+0

請發佈您的崩潰日誌。 – Rohit5k2

+0

發佈你的logcat –

+0

你試圖在隨機的地方運行代碼;這不是Java的工作原理。 –

回答

0
fragmentManager = getFragmentManager(); 
anotherFragment = (AnotherFragment) fragmentManager.findFragmentById(R.id.another_fragment); 

不在任何方法塊中。您正在嘗試在活動就緒之前獲取這些值。在裝入AnotherFragment後調用的方法內移動。

+0

是的,我確實搞清楚了。但我想知道爲什麼它必須在我的接口方法實現? –

+1

不一定。只要'AnotherFragemnt'在那個時候加載,它就可以在任何方法內。 – Rohit5k2

0

我敢打賭你會得到NullPointerException,對不對?

這是因爲您在Activity「準備好」之前運行您的代碼。例如,

您的Activtiy已準備好在onCreate()中。所以我們把代碼放在那裏。

public class MainActivity extends AppCompatActivity implements FragmentInterface { 
    FragmentManager fragmentManager; 
    AnotherFragment anotherFragment; 

    @Override 
    protected void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.myLayout); 

     fragmentManager = getFragmentManager(); 
     anotherFragment = (AnotherFragment) fragmentManager.findFragmentById(R.id.another_fragment); 
    } 
} 

你可以找到更多關於活動的生命週期here