2013-05-20 176 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