【问题标题】:Dismiss and show Dialog when change orientation in AsyncTask in ViewPager在 ViewPager 的 AsyncTask 中更改方向时关闭并显示对话框
【发布时间】:2013-09-02 11:34:40
【问题描述】:

我有 ViewPager 三页。在其中一个中,我在 AsyncTask 中显示了一个 ProgressDialog

问题是当改变方向时,Dialog被关闭并且不出现。

这是我的代码:

AndroidManifest.xml

<activity 
    android:name=".LecturaFragment"
    android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 
    android:windowSoftInputMode="adjustPan"  >
</activity>

SherlockFragmentActivity

lecturaFragment.new LoadingLecturaTask(this).execute(lecturas);

//In LecturaFragment (SherlockFragment)
private ProgressDialog dialog;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);    
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState)
{
    ...
}

public void onPause() {
    super.onPause();

    if(dialog != null) {
        dialog.dismiss();
    }
    dialog = null;
}

public class LoadingLecturaTask extends AsyncTask<String, Void, Boolean> {
    private Activity activity;
    private volatile boolean running = true;
    private int lecturas;
    private String result = "";
    /** application context. */
    private Context context;

    public LoadingLecturaTask(Activity activity) {
        this.activity = activity;
        context = activity;
        dialog = new ProgressDialog(context);
        dialog.setCancelable(true);
        dialog.setOnCancelListener(new OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                cancel(true);
            }
        });
    }

    @Override
    protected void onCancelled() {
        running = false;
    }        

    @Override
    protected void onPreExecute() {
        dialog.setMessage(getString(R.string.loading_envio));
        dialog.show();
    }

    @Override
    protected void onPostExecute(final Boolean success) {
        if (dialog != null && dialog.isShowing()) {
        dialog.dismiss();
        }

        if (success) {
            ...
        }
    }

    @Override
    protected Boolean doInBackground(final String... args) {
        lecturas = Integer.parseInt(args[0]);
        while (running) {
            try{
                ...                 
                return true;
            } catch (Exception e){
                e.printStackTrace();
                return false;
            }
        }
        return null;
    }
}

正如我所说,在更改方向上,ProgressDialog 消失了,但 AsyncTask 仍在运行。所以我想要的是,当改变方向并且 Dialog 被解除时,再次显示它直到 AsyncTask 结束。

【问题讨论】:

    标签: android dialog android-viewpager progressdialog


    【解决方案1】:

    这是因为每当屏幕方向改变时,Activity 都会重新加载。您可以通过 manifest.xml 文件中的单行解决此问题

    Android 3.0 以上

    <activity
                android:name="yourActivityWhichContainsViewPager"
                android:configChanges="keyboardHidden|orientation|screenSize"
                />
    

    Android 3.0 以下

    <activity
                android:name="yourActivityWhichContainsViewPager"
                android:configChanges="orientation"
                />
    

    【讨论】:

    • 哇!我发现了问题...我在LecturaFragment 中找到了它,但在包含ViewPagerActivity 中没有。谢谢!
    【解决方案2】:

    根据我的说法,你的 dismiss() 你的对话 in onPause() 所以有可能你的活动正在重新启动,而不是你的 AsyncTask

    如果可能,请正确粘贴您的代码。

    【讨论】:

      【解决方案3】:

      在你的清单中试试这个...

      <activity android:name="Your Activity Name"
                   android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:windowSoftInputMode="adjustPan"/>
      

      【讨论】:

      • 我忘了...我实际上在我的 AndroidManifest 中有它(现在添加到我的问题中)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      相关资源
      最近更新 更多