【问题标题】:Dealing with the result of an Async Task处理异步任务的结果
【发布时间】:2014-05-12 17:54:08
【问题描述】:

就目前而言,我的应用程序正在/正在处理异步任务中的 http post 和其他一些内容,然后当任务完成并调用 onPostExecute 时,我会尝试通过片段事务重定向到另一个片段。这已被证明非常棘手,我正在寻找处理这种情况的替代方法,而不尝试在 onPostExecute 中提交事务。谢谢!

编辑:这是从 onPostExecute 调用的方法...

private void callback(boolean submissionSuccessful)
{
    if (submissionSuccessful)
    {
        FragmentManager fragmentManager = getActivity()
                .getSupportFragmentManager();

        Fragment f =  new CompletedFragment();

        Bundle args = new Bundle();

        args.putString("id", reportToSubmit.getReferenceId());

        f.setArguments(args);

        fragmentManager.beginTransaction()
                .replace(R.id.content_frame, f, "completed").commit();


    }
    else
    {
        Toast.makeText(getActivity(), getResources().getString(R.string.report_error), 
                Toast.LENGTH_LONG).show();
    }
}

原因如下:用户完成向导(ViewPager),提交,在处理过程中显示一个进度对话框,完成后 onPostExecute 提交一个确认片段,让用户知道该过程已完成。

【问题讨论】:

  • 请展示:1. 你现在是如何处理事情的,以及 2. 究竟是什么被证明是棘手的?
  • 我现在编辑了我的原始帖子以反映此信息。

标签: android android-asynctask fragmenttransaction


【解决方案1】:

逻辑看起来很不错。我不确定你想改变什么。

两件事:

  • 您可能想告诉您的Activity 进行转换(移动回调方法)。这将这个 Fragment 与第二个分离,这被认为是“良好实践”。
  • 其次,在onPostExecute 中,您的Fragment 可能不再附加到ActivitygetActivity() 将返回null。您可以取消onPause 中的AsyncTask,或检查onPostExecute 中的isAdded

【讨论】:

  • 奇怪的是,使用这段代码,有时当我的 Async 方法完成时,它会移动完成的片段并且我看到它,但其他时候它会跳过完成片段的视图。这是我现在的主要问题,如果在调用 onsaveInstance() 之后偶然调用 commit() 会引发非法状态异常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2011-04-11
  • 1970-01-01
  • 2015-07-18
相关资源
最近更新 更多