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

附件需求分析与实践

作者: 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