【问题标题】:Get DialogFragment from FragmentManager by findFragmentByTag通过 findFragmentByTag 从 FragmentManager 获取 DialogFragment
【发布时间】:2014-08-15 08:45:46
【问题描述】:

我已经通过 DialogFragment 创建了一个进度对话框,为此我使用这篇文章作为我的 DialogFragment 的基础:https://gist.github.com/daichan4649/6421407 实际上在我的应用程序中我有一个调用类的活动,并且这个类使用 AsyncTask 复制保存sqlite 数据库中的一些数据。 我使用进度对话框来显示 AsyncTask 进度。

我的代码有效,但是有一个小问题:当用户旋转设备时,进度条不再更新,因为 findFragmentByTag 返回始终为 null。

这是我的一小段代码。我认为问题出在这里:

public class TafData {

private Context mContext;

public TafDownload(Context context) {

    mContext = context;
}

... other code ...

private class importTAFAsync extends AsyncTask <String, Integer, String> {
    ... other code ...
}

private void showProgress() {
    TafActivity tafactivity = (TafActivity) mContext;
    FragmentManager fm = tafactivity.getFragmentManager();
    ProgressDialogFragment pDialog = ProgressDialogFragment.newInstance("Caricamento TAF", "Caricamento in corso. Attendere...", 100);
    pDialog.show(fm, "fragment_progress");
}

private void setMax(Integer... values) {
    ProgressDialogFragment progress = getProgressDialogFragment();
    if (progress == null) {
        return;
    }
    progress.setMax(values[0]);
}

private void updateProgress(Integer... values) {
    ProgressDialogFragment progress = getProgressDialogFragment();
    if (progress == null) {
        return;
    }
    progress.updateProgress(values[0]);
}

private void hideProgress() {
    ProgressDialogFragment progress = getProgressDialogFragment();
    if (progress == null) {
        return;
    }
    progress.dismissAllowingStateLoss();
}

private ProgressDialogFragment getProgressDialogFragment() {
    TafActivity tafactivity = (TafActivity) mContext;

    Fragment fragment = tafactivity.getFragmentManager().findFragmentByTag("fragment_progress");
    return (ProgressDialogFragment) fragment;
}
}

这是一个清单:

<activity
    android:name="com.myapp.TafActivity"
    android:label="@string/title_activity_taf">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="myapp.MapsActivity" />
</activity>

【问题讨论】:

  • 你能发布你的 AndroidManifest.xml 吗?或者至少是清单中 TafActivity 的 Activity 声明。
  • @JDJ 您需要所有清单或正在寻找特别的东西。如果可能,我想避免发布所有清单,但如果您认为这可以帮助我可以做到。
  • 我只需要从清单中查看您对 TafActivity 的 声明。
  • @JDJ 我在问题上添加了清单的一部分。
  • 谢谢。尝试在活动声明中添加android:configChanges="orientation|keyboardHidden"

标签: android android-fragments android-asynctask dialog


【解决方案1】:

将此行添加到您在 AndroidManifest.xml 中的 TafActivity 声明中:

android:configChanges="orientation|keyboardHidden" 

这将防止系统在方向更改时破坏您的活动。

【讨论】:

  • 是的,我知道,但我希望允许用户旋转设备。我不想阻止它。
  • 这仍然允许用户旋转设备。
  • 我已尝试将您的字符串添加到清单中。屏幕可以旋转,但我有同样的问题。旋转后进度不会更新,因为 findFragmentByTag 返回 null。
  • 在调用 findFragmentByTag 之前,请尝试执行以下操作:FragmentManager fm = tafactivity.getFragmentManager();fm.executePendingTransactions();
  • 您有机会尝试吗?
猜你喜欢
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
  • 2018-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多