更新DialogFragment视图(并使用AsyncTask)

时间:2013-05-07 21:48:54

标签: android android-asynctask fragment dialogfragment

我正在通过替换所有已弃用的方法来更新我的应用。现在,我遇到了DialogFragments的问题。

我有一个像这样的DialogActivity:

public class Actualizar extends FragmentActivity 
{
    /**BASIC ACTIVITY CODE HERE **/

    /**WHERE THAT I NEED HELP **/
    OnClickListener onClickListener = new OnClickListener()
    {
        @Override
        public void onClick(View v) 
        {
            AsyncTaskActualizarDatos task = new AsyncTaskActualizarDatos();
            task.execute();
        }
    };
}

当我点击一个按钮时,我想执行AsyncTask。此任务应显示带有自定义布局的DialogFragment,并通过FTP下载某个文件。

AsyncTask是这样的:

public class AsyncTaskActualizarDatos extends AsyncTask<Void,Void,Void>
{
    FragmentoComunicacion fragmento;

    @Override
    protected void onPreExecute() 
    {
        fragmento = FragmentoComunicacion.actualizarDatos();
        fragmento.show(fm, "dialog");
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... arg0) 
    {
          /** DO SOMETHING HERE **/
    }
}

片段是这样的:

public class FragmentoComunicacion extends DialogFragment
{
    public static FragmentoComunicacion actualizarDatos()
    {
        FragmentoComunicacion f = new FragmentoComunicacion();
        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    {
        View v = inflater.inflate(R.layout.fragment_dialog_actualizar_datos, container);
        getDialog().setTitle("Title");
        return v;
    }
}

现在......我正在尝试更新片段中的视图(使用publishProgress),但我不知道在哪里可以做到这一点。当我尝试使用fragmento.findView时()[doInBackground()]中的()得到了一个nullPointerException。

我很困惑......这样做的正确方法是什么?

谢谢!

2 个答案:

答案 0 :(得分:3)

我相信您正在寻找的电话是:

fragmento.getDialog()。findViewById(...)

答案 1 :(得分:0)

FragmentoComunicacion fragmento;

@Override
protected void onPreExecute() 
{
    FragmentoComunicacion fragmento = FragmentoComunicacion.actualizarDatos();
    fragmento.show(fm, "dialog");
    super.onPreExecute();
}

您正在使用本地字段fragmento隐藏父字段fragmento,您需要对其进行更改:FragmentoComunicacion fragmento = FragmentoComunicacion.actualizarDatos(); 对此:fragmento = FragmentoComunicacion.actualizarDatos();