按钮单击片段,使用Indeterminate ProgressDialog启动AsyncTask,无可用的有效上下文

时间:2013-05-26 17:44:44

标签: android android-fragments android-dialog

基本上,我使用可滚动的标签和滑动构建了Eclipse和Android开发工具提供的默认新Activity UI。

基于Fragment

我试图在片段内部扩展视图,在此视图中附加按钮单击侦听器,这将启动AsyncTask,然后在其onPostExecute方法中显示进度对话框。

以下是一些代码:

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

            View rootView = inflater.inflate(R.layout.my_view, container, false);

            Button bProcess= (Button) rootView.findViewById(R.id.bJustParked);
            bProcess.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    new JustParkedGetLocation().execute();
                }

            });

            // Modify views in fragment below

            return rootView;
        }

显然,JustParkedGetLocation扩展了AsyncTask,并且是包含上述onCreateView方法的类的子类。但是,如果我想在JustParkedGetLocation->onPreExecute()中创建一个对话框,例如:

@Override
protected void onPreExecute() {
    ProgressDialog progress = new ProgressDialog(this);
    progress.setIndeterminate(true);
    progress.setTitle("Getting location");
    progress.show();
    super.onPreExecute();
}

... ProgressDialog构造函数的参数不正确,因为默认情况下,保存onCreateView方法的类是静态的(扩展Fragment的类)。导致以下错误:

The constructor ProgressDialog(MainActivity.ExtendedFragment.JustParkedGetLocation) is undefined

1 个答案:

答案 0 :(得分:1)

您需要向构造函数传递对活动上下文的引用:

ProgressDialog progress = new ProgressDialog(getActivity());