使用DialogFragment来创建加载进度UI

DialogFragment在android 3.0时被引入,用于在Activity的内容之上展示一个模态的对话框。典型的用于:展示警告框,输入框,确认框等等。今天来介绍如何使用DialogFragment来创建加载进度的旋转UI。

1》继承DialogFragment,重写onCreateView方法

/**
 * 
 * @类说明   自定义LoadingFragment
 *
 * @author 逆生长
 *
 * @created 2015年7月17日
 */
@SuppressLint({ "NewApi", "ValidFragment" })
public class LoadingFragment extends DialogFragment {

    private String mText;
    private TextView tipTextView;

    public LoadingFragment() {

    }

    public LoadingFragment(String text) {
        this.mText = text;
    }

    @SuppressLint("NewApi")
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        LayoutInflater inflater = LayoutInflater.from(getActivity());
        View v = inflater.inflate(R.layout.progressdialog_no_deal, null);
        LinearLayout layout = (LinearLayout) v.findViewById(R.id.dialog_view);
        ImageView spaceshipImage = (ImageView) v.findViewById(R.id.img);
        tipTextView = (TextView) v.findViewById(R.id.tipTextView);//

        //设置文字
        tipTextView.setText(mText);
        //设置旋转动画
        Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(getActivity(), R.anim.anim);
        spaceshipImage.startAnimation(hyperspaceJumpAnimation);

        Dialog loadingDialog = new Dialog(getActivity(), R.style.customDialogTheme);
        loadingDialog.setCanceledOnTouchOutside(false);// 设置点击屏幕Dialog不消失  
        loadingDialog.setCancelable(true);// 设置点击返回键取消

        loadingDialog.setContentView(layout, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.MATCH_PARENT));

        return loadingDialog;

    }
}

2》新建一个管理类 用来控制LoadingFragment的显示与隐藏

/**
 * 
 * @类说明   dialog管理类  用来控制LoadingFragment的显示与隐藏
 *
 * @author 逆生长
 *
 * @created 2015年7月17日
 */

public class DialogManager {

    private LoadingFragment loadingDialogFragment;
    //用来控制是否显示dialog
    private boolean isShowing = false;

    public DialogManager(){
        loadingDialogFragment = new LoadingFragment();

    }

    public void setText(String str){
        loadingDialogFragment = new LoadingFragment(str);
    }


    /**
     * 显示dialog
     * @param fm
     */
    @SuppressLint("NewApi")
    public void showLoadingDialogFragment(FragmentManager fm){
        if(!isShowing){
            loadingDialogFragment.show(fm, "dialog");
            isShowing = true;
        }
    }

    /**
     * 隐藏dialog
     */
    @SuppressLint("NewApi")
    public void hideLoadingDialogFragment(){
        if(isShowing){
            if(loadingDialogFragment.getActivity() != null){
                loadingDialogFragment.dismissAllowingStateLoss();
            }

            isShowing = false;
        }
    }
}

最后 在MainActivity 显示

public class MainActivity extends Activity implements OnClickListener {


    private DialogManager mDialogManager;

    // 定义处理消息的对象
    private Handler handler = new Handler() {

        public void handleMessage(Message msg) {
            //隐藏dialog
            mDialogManager.hideLoadingDialogFragment();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.show).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.show:
            showDialog();
            break;
        }

    }

    private void showDialog(){
        new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    mDialogManager = new DialogManager();
                    mDialogManager.setText("加载中。。。");
                    mDialogManager
                            .showLoadingDialogFragment(getFragmentManager());
                    Thread.sleep(2000);// 睡2秒
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                handler.sendEmptyMessage(0);// 传送消息

            }
        }).start();
    }
}

ok ! 代码写完,使用DialogFragment来创建加载进度UI介绍完毕!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值