【问题标题】:update a DialogFragment view (and using a AsyncTask)更新 DialogFragment 视图(并使用 AsyncTask)
【发布时间】:2013-05-07 21:48:54
【问题描述】:

我正在通过替换所有已弃用的方法来更新我的应用程序。现在,我遇到了 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。

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

谢谢!

【问题讨论】:

    标签: android android-asynctask fragment dialogfragment


    【解决方案1】:

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

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

    【讨论】:

    • 是的,你是对的......我的问题是在 doInBackground 方法中调用了一个视图......
    • 啊,是的,这也是个问题。你想好如何在 onPostExecute 中做事了吗?
    • 是的......经过 8 小时的良好睡眠后,我可以看到我做错的所有事情......
    【解决方案2】:
    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();

    【讨论】:

    • 感谢您的回答......但这只是一个错字......现在代码是正确的......(嗯,不是真的正确......你知道)
    猜你喜欢
    • 1970-01-01
    • 2019-05-23
    • 2019-05-25
    • 2015-05-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多