2013-05-20 237 views
0

我試圖在AsyncTask中的onPreExecute方法中更改文本視圖,但是我不斷收到空值點異常。任何幫助或替代品將不勝感激。在片段中更改TextView OnPreExecute

公共類FragmentOne擴展SherlockFragment {

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 

    new LongOperation().execute(""); 

    View view = inflater.inflate(R.layout.fragmentone, container, false); 
    return view; 

} 


private class LongOperation extends AsyncTask<String, Void, String> { 

    @Override 
    protected void onPreExecute() { 
     TextView txt = (TextView) getView().findViewById(R.id.textView1); 
     txt.setText("\nLoading..."); 
    } 

    // etc etc etc 
} 

}

回答

0

回報您的充氣佈局我覺得做如下修改後的代碼將工作。 :d空指針是來自getView()我覺得

TextView txt = null; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 

     View view = inflater.inflate(R.layout.fragmentone, container, false); 
     txt = (TextView) view.findViewById(R.id.textView1); 
     new LongOperation().execute(""); 
     return view; 

    } 
    private class LongOperation extends AsyncTask<String, Void, String> { 

     @Override 
     protected void onPreExecute() { 
      txt.setText("\nLoading..."); 
     } 

     // etc etc etc 
    } 
+0

我試過了,它沒有工作。無論如何,謝謝你。 – user2122179

+0

立即開始工作!也許因爲我把這個設置成view後new LongOperation()。execute(「」); – user2122179

+0

祝你好運:D –

1

onPreExecute()將前​​回報調用。因此,getView()onPreExecute()將返回null,因爲你甚至沒有膨脹View,更不用說從onCreateView()返回它。

請:

  • AsyncTask
  • 刪除onPreExecute()充氣佈局第一
  • 呼叫findViewById()和更新onCreateView()TextView(目前你正在做的onPreExecute()
  • 然後​​什麼您的LongOperation
  • 最後,從onCreateView()
+0

謝謝你,我現在用的是答案傑夫·李貼,我不知道這是做一個很好的方式,但它工作。 – user2122179

+2

@ user2122179:該方法應該沒問題。唯一的區別是他保留了'onPreExecute()',而我將刪除該方法並將'setText()'調用移動到'onCreateView()'中。 – CommonsWare