在Fragment OnPreExecute中更改TextView

时间:2013-05-20 06:47:44

标签: android android-fragments android-asynctask

我正在尝试在AsyncTask中的onPreExecute方法中更改文本视图,但是我一直在获得Null Point Exception。任何帮助或替代方案将不胜感激。

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

}

2 个答案:

答案 0 :(得分:1)

onPreExecute()返回之前将调用

execute()。因此,getView()中的onPreExecute()将返回null,因为您还没有夸大View,更不用说从onCreateView()返回了它。

请:

  • onPreExecute()
  • 中删除AsyncTask
  • 首先夸大您的布局
  • 致电findViewById()并更新TextView中的onCreateView()(您目前在onPreExecute()
  • 中所做的事情
  • 然后 execute()您的LongOperation
  • 最后,从onCreateView()
  • 返回您的虚增布局

答案 1 :(得分: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
    }
相关问题