美文网首页
附件需求分析与实践

附件需求分析与实践

作者: Jason_Lcy | 来源:发表于2019-02-18 14:59 被阅读0次

    一、 前言

    作为开发人员当你拿到一份需求的时候是如何处理的呢?是否有经过深思熟虑呢?我的建议是先考虑这份需求是否能分成多个独立的模块,各个模块是否有共用的部分,共用的部分是否有业务逻辑?如果不含有业务逻辑可以放到帮助类中,如果包含业务逻辑就要再考虑是放到基类中、封装成单例类还是放到Fragmen中。

    二、 实例讲解

    经过上面的需求分析就可以动手了,本文主要讲述实际开发中经常会使用到的附件作为一个需求模块,从无到有,从有到逐步完善、封装的过程,目的是分享开发思路所以实现部分都是伪代码代替。

    1.Data——从网络获取附件列表List<Attachment>

    略...

    2.CreateView Fragmet接收List<Attachment>并且渲染附件界面

    首先创建AttachmentFragment和两个方法newInstance、loadAttachments,具体解释可以看注释。

    图2-1 CreateView.png
    /**
     * 附件Fragment
     */
    public class AttachmentFragment extends Fragment {
        /**
         * 接收附件数据
         *
         * @param list
         * @return
         */
        public static AttachmentFragment newInstance(List<Attachment> list) {
        }
        /**
         * 渲染附件视图
         *
         * @param list
         */
        private void loadAttachments(List<Attachment> list) {
        }
    }
    

    效果如下:

    图2-2 附件视图.png

    3. OnEven 附件事件响应

    此时用户已经可以看到附件,我们还需要添加事件以完善封装内容,比如用户想默认单击预览附件,长按分享附件等。

    图2-3 OnEvent.png
    /**
     * 附件Fragment
     */
    public class AttachmentFragment extends Fragment {
        /**
         * 接收附件数据
         *
         * @param list
         * @return
         */
        public static AttachmentFragment newInstance(List<Attachment> list) {
            AttachmentFragment fragment = new AttachmentFragment();
            // TODO: 2019/2/18
            return fragment;
        }
    
        /**
         * 渲染附件视图
         *
         * @param list
         */
        private void loadAttachments(List<Attachment> list) {
    
        }
    
        /**
         * 单击事件
         *
         * @param attachment
         * @param position
         */
        private void itemClick(Attachment attachment, int position) {
            if (mClicklistener != null) {
                mClicklistener.onItemClick(attachment, position);
            } else {
                // 跳转到附件预览界面
                PreviewActivity.start(getActivity(), attachment);
            }
        }
    
        /**
         * 长按事件
         *
         * @param attachment
         * @param position
         */
        private void itemLongClick(Attachment attachment, int position) {
            if (mClicklistener != null) {
                mClicklistener.onItemLongClick(attachment, position);
            }
        }
    
        /**
         * 回调方法
         */
        private OnClickListener mClicklistener;
    
        /**
         * 设置回调方法
         *
         * @param onClickListener
         */
        public void setListener(OnClickListener onClickListener) {
            mClicklistener = onClickListener;
        }
    
        /**
         * 点击回调接口
         */
        public interface OnClickListener {
            void onItemClick(Attachment attachment, int position);
    
            boolean onItemLongClick(Attachment attachment, int position);
        }
    }
    

    4.Preview 预览

    略...

    5.Callback 事件回调

    可以根据自己的需求创建接口以实现回调方法。

    图2-4 Callback.png
    public class UIActivity extends FragmentActivity implements AttachmentFragment.OnClickListener {
        /**
         * 初始化附件
         *
         * @param attachmentList
         */
        private void initattachment(List<Attachment> attachmentList) {
            AttachmentFragment attachmentFragment = AttachmentFragment.newInstance(attachmentList);
            //设置回调
            attachmentFragment.setListener(this);
    
            FragmentTransaction transaction = getSupportFragmentManager()
                    .beginTransaction()
                    .replace(R.id.llAttachmentArea, attachmentFragment);
            try {
                transaction.commitAllowingStateLoss();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 附件单击回调方法
         *
         * @param attachment
         * @param position
         */
        @Override
        public void onItemClick(Attachment attachment, int position) {
            // TODO: 2019/2/18
        }
    
        /**
         * 附件长按回调方法
         *
         * @param attachment
         * @param position
         * @return
         */
        @Override
        public boolean onItemLongClick(Attachment attachment, int position) {
            // TODO: 2019/2/18  
            return false;
        }
    }
    

    三、 总结

    到这里附件基本功能都已经封装好了,大家想想是否还可以进一步完善代码呢?当然了,比如例子中附件视图的渲染是固定,我们还可以在CreateView当中除了传递List<Attachment>外增加布局文件layout_attachment和绘制视图的抽象方法onCreateView,这样是不是更灵活呢?

    相关文章

      网友评论

          本文标题:附件需求分析与实践

          本文链接:https://www.haomeiwen.com/subject/yvpaeqtx.html