0

我正在尝试更改 AsyncTask 中 onPreExecute 方法中的文本视图,但是我不断收到 Null Point 异常。任何帮助或替代方案将不胜感激。

公共类 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
}

}

4

2 回答 2

1

onPreExecute()将在execute()返回之前调用。因此,getView()in onPreExecute()will return null,因为您甚至还没有充气过View,更不用说从onCreateView().

请:

  • onPreExecute()您的AsyncTask
  • 首先膨胀你的布局
  • 调用findViewById()并更新TextViewin onCreateView()(你目前在做什么onPreExecute()
  • 然后 execute()你的LongOperation
  • 最后,从onCreateView()
于 2013-05-20T06:52:39.887 回答
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
    }
于 2013-05-20T06:53:55.763 回答