【问题标题】:Show Dialog, on Fragment working显示对话框,关于片段工作
【发布时间】:2016-09-18 09:13:45
【问题描述】:

我有一个 Fragment,在它的 onStart() 处,我做了很多 BD 查询,这些查询长达 15 秒。我想显示一个带有“加载圈”的进度对话框。 我的应用程序只有一个 Activity,即 Main。这开始了第一个 Fragment,从这里开始,我跳到另一个 Fragment,下一个也是如此。为了从一个 Fragment 传递到另一个 Fragment,我使用了下一个静态方法。

public static startFragment(FragmentTransaction FT, Fragment newFragmentToOpen)
{
   FT.replace(R.id.Container, newFragmentToOpen);
   FT.addToBackStack(null);
   FT.commit();
}

我尝试在该方法中创建一个线程以启动进度对话框,但它不起作用。我试图在 Fragment 的 OnCreate() 方法上启动对话框,但也没有用。

我能做什么?

谢谢。

(编辑) 我试图在片段内部的 onCreateView() 和 onViewCreated() 处启动进度对话框。它没有用,但是如果我逐步调试,我会看到当流程进入 onStart() (使用 DB 持续 10 秒)时,ProgressDialog 停止。

通过这个测试,我知道 ProgressDialog 正确显示,但是当我转到 onStart() 时,它消失了。

(编辑)

问题是,在 Fragment 的 onStart() 处,我正在处理视图,添加元素。我需要,在加载这些元素时,会显示一个对话框,因为现在,对于用户来说,应用程序在加载时似乎停止了。我需要这样的东西:

public static startFragment(FragmentTransaction FT, Fragment newFragmentToOpen)
{
    startProgressDialog();

    FT.replace(R.id.container, newFragmentToOpen);
    FT.addToBackStack(null);
    FT.commit();

    stopProgressDialog();
}

但它不起作用,因为当 Fragment 的视图完全加载时,进度对话框才开始。

【问题讨论】:

  • 请添加您之前尝试过的代码,有助于更好地理解问题。
  • 代码太多了。正如我在帖子中所说,我的应用程序基于 Fragments。我有很多片段,一个接一个地被称为。为此,我使用了一种静态方法(在第一篇文章中显示)。在 Fragments 上,在 OnStart() 上我做了很多 DB 语句,然后我需要在它加载的 10 秒内显示一些东西。

标签: android android-fragments fragment progressdialog


【解决方案1】:

您应该尝试在onCreateView() 中显示对话框,因为这是在Fragment 中显示 UI 组件的位置

【讨论】:

  • 它不起作用。我有这个:私有静态 ProgressDialog espera; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { LayoutInflater inflador;充气机=充气机; espera = new ProgressDialog(inflador.getContext()); espera.setMessage("加载中"); espera.setIndeterminate(true); espera.show();返回 inflador.inflate(R.layout.layout_fragment_clasificaciones_wec,container, false);我也尝试在 onStart() 处调用“显示”;
  • 你尝试过 new ProgressDialog(getActivity()) 而不是 new ProgressDialog(inflador.getContext())
  • 它也不起作用。我正在尝试使用 onViewCreated() 方法,但没有结果。
【解决方案2】:

我找到了解决方案。

  1. 创建 STATIC 变量。这些将包含我将在 Fragment 的 OnStart() 中使用的信息。
  2. 在进行片段转换之前,请启动进度对话框。
  3. 启动进度对话框后,启动线程。
  4. (进入线程)将信息加载到静态变量中。
  5. (进入线程)加载所有信息后,关闭进度对话框。
  6. (进入线程)调用片段进行加载。
  7. 线程结束。
  8. 进入 de Fragment,在 OnStart() 处,从 STATIC 变量中获取信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    相关资源
    最近更新 更多