【问题标题】:Android DialogFragmentAndroid DialogFragment
【发布时间】:2015-09-16 13:50:19
【问题描述】:

我使用一个扩展 DialogFragment 的类,在这个类中我使用一个 AsyncTask 来加载我的 AlertDialog 的内容。
我的问题是:如何创建一个 AlertDialog 显示:“正在加载...”,然后在我的 onPostExecute 方法中显示内容?

public class MyDialog extends DialogFragment {

    public MyDialog(){
       super();
    }

    @Override
    public Dialog onCreateDialog(final Bundle savedInstanceState) {
       AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

       ....

       return builder.create();
    }

    public class myTask extends Asynctask<Void, Void, Void> {

       @Override
       protected Void onPreExecute(){
           Show loading... in AlertDialog
       }

       @Override
       protected Void doInBackground(Void... voids) {
           Load content...
       }

       @Override
       protected Void onPostExecute(){
           Show content in AlertDialog
       }
   }

【问题讨论】:

    标签: android dialog dialogfragment


    【解决方案1】:

    为此,我的建议是不要使用 AlertDialog。使用进度对话框,这是您的完整对话框,

    public class MyDialog extends DialogFragment {
    
        public MyDialog(){
           super();
        }
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.your_dialog_id, container, false);
            new myTask().execute();
            return view;    
        }
    
        private void afterContentLoad (Object content)
        {
            //Update your UI with respect of your content :)
        }
    
        public class myTask extends Asynctask<Void, Void, Void> {
           private ProgressDialog mDialog;
           @Override
           protected Void onPreExecute(){
               try{
                  mDialog = ProgressDialog.show(getActivity(), "", "Loading...!");
               }
               catch(Exception e)
               {
                   //BadTokenException
                   e.printStackTrace();
               }
           }
    
           @Override
           protected Void doInBackground(Void... voids) {
               Load content...
           }
    
           @Override
           protected Void onPostExecute(){
               if (mDialog != null && mDialog.isShowing()){
                   mDialog.dismiss();
               }
               //Put your code after content loaded
               afterContentLoad(Object);
           }
       }
    

    }

    【讨论】:

    • 你不需要 OnCreateDialog 方法?
    • 谢谢!但是我想把我的内容加载到一个对话框中,我可以把我的内容放到 progressDialog 中吗?
    • 我在哪里调用 asynctask ?我使用 MyDialog 片段 = new MyDialog();片段.show(片段管理器,“显示”);目前我将内容放入 AlertDialog
    • 不要把你的内容放到AlertDialog里,把它放到DialogFragment里,因为你不能像DialogFragment那样自定义AlertDialog
    • 谢谢,但是内容加载后我怎么放?
    猜你喜欢
    • 2021-02-05
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多