0

我想至少我想做的是在 DialogFragment 被解除时刷新 ListView 。整个刷新过程在我的 AsyncTask 中。我实际上发现了很多问题/答案,但对我的情况没有任何帮助。

我试过:

1)在我的DialogFragment中的onDismiss,获取AsyncTask本地类的实例并执行它。但是我遇到了一堆错误,我认为因为我试图创建一个新的 Activity 并且每次对话框被关闭时,实际上没有任何意义,而且会占用很多内存。

@Override
    public void onDismiss(DialogInterface dialog) {
        MainActivity outterObject = new MainActivity();
        MainActivity.LoadApplications buffer = outterObject.new LoadApplications();
        buffer.execute();
    }

2)MainActivity中的onResume,因为我认为当Dialog出现时Activity进入状态“暂停”。但它只会在我关闭并再次打开我的应用程序时刷新 ListView。

@Override
    protected void onResume() {
        super.onResume();
        new LoadApplications().execute();
    }
4

2 回答 2

1

以您的方法实例化Activity您的onDismiss方式是错误的。永远不需要这样做。

看起来您需要一种在您的DialogFragment和之间进行通信的方法Activity文档中清楚地介绍了这个确切的主题。在你的情况下,这可能是一个潜在的实现:

interface Refresher {
  void onRefresh();
}

class MainActivity extends Activity implements Refresher {

  // ... 

  void onRefresh() {
    new LoadApplications().execute();
  }  

}

class MyDialogFragment extends DialogFragment {

  private Refresher mRefresher;

  @Override
  public void onAttach(Activity activity) {
    super.onAttach(activity);
    try {
      mRefresher = (Refresher) activity;
    } catch (ClassCastException ex) {
      throw new ClassCastException("Activity must implement Refresher interface!");
    }
  }

  @Override
  public void onDismiss(DialogInterface dialog) {
    super.onDismiss(dialog);
    mRefresher.onRefresh();
  }

} 
于 2014-05-26T09:59:42.503 回答
0

在你的对话框中试试这个

public class CustomDialogFragment extends DialogFragment
{

    private OnDismissListener onDismissListener;


    @Override
    public Dialog onCreateDialog(final Bundle savedInstanceState)
    {
        Dialog dialog = super.onCreateDialog(savedInstanceState);        
        dialog.setOnDismissListener(new DialogInterface.OnDismissListener()
        {
            @Override
            public void onDismiss(final DialogInterface dialog)
            {
                if (onDismissListener != null)
                    onDismissListener.onDismiss();
            }
        });
        return dialog;
    }

    public interface OnDismissListener
    {
        public void onDismiss();
    }

    public void setOnDismissListener(final OnDismissListener onDismissListener)
    {
        this.onDismissListener = onDismissListener;
    }
}

并调用你的活动

myCustomDialogFragment.setOnDismissListener(new FAQDialog.OnDismissListener() {
                    @Override
                    public void onDismiss()
                    {

                    }
                });
于 2014-05-26T09:12:03.870 回答