1

我有一個在onCreateView方法中有很多代碼的片段,所以我認爲將這段代碼放在外部線程中是一個好主意。現在的問題是,我在這個線程加載一個佈局,但如果我在我的活動onStart方法來創建這個片段的新對象時,它在該行涉及到一個NullPointerException異常:無法在後臺線程中加載LayoutInflater線程

LayoutInflater inflater = getActivity().getLayoutInflater(); 

我覺得getActivity返回null但爲什麼?我在onStart方法中創建對象。那裏的活動不應該返回null或我的沉思有什麼問題?我的代碼:

MyFragment f; 

public class Tablet extends FragmentActivity 
{ 
    // onCreate(), Variables and so on... 

    @Override 
    protected void onStart() 
    { 
     super.onStart(); 
     f = new MyFragment(); 
    } 
} 

public class StundenAnsicht extends Fragment implements Runnable 
{ 
    public MyFragment() 
    { 
     Thread t = new Thread(this); 
     t.start(); 
    } 

    @Override 
    public void run() 
    { 
     LayoutInflater inflater = getActivity().getLayoutInflater(); 
     //... 
    } 
} 
+0

你可以發佈onStart()方法和線程的代碼嗎? –

+0

我添加了我的帖子。我也嘗試過'onResume()',但這沒有幫助。 – Cilenco

回答

3

我覺得getActivity返回null但是爲什麼呢?

因爲片段尚未添加到活動中。事實上,如你所示的代碼,你的片段永遠不會成爲一個活動的一部分,因爲你沒有通過FragmentTransaction將它添加到其中。

+0

哦,是的,你是對的,這是合理的。所以我不能加載佈局,如果我不把它添加到一個活動?還是有其他方法可以做到這一點? – Cilenco

+0

@Cilenco:「所以我不能加載佈局,如果我不將它添加到活動?」 - 您需要一個「活動」來擴大布局。我的建議是要刪除你使用線程所做的一切。讓你的片段正常處理你的活動。然後使用Traceview來確定*特別是*什麼是緩慢的,如果有的話。 *然後*,然後才考慮如何最好地使用線程來解決慢速位,如果有的話。 – CommonsWare

0

getActivity()返回當前與當前片段關聯的Activity。請首先使用Activity附加片段。