一、 前言
作为开发人员当你拿到一份需求的时候是如何处理的呢?是否有经过深思熟虑呢?我的建议是先考虑这份需求是否能分成多个独立的模块,各个模块是否有共用的部分,共用的部分是否有业务逻辑?如果不含有业务逻辑可以放到帮助类中,如果包含业务逻辑就要再考虑是放到基类中、封装成单例类还是放到Fragmen中。
二、 实例讲解
经过上面的需求分析就可以动手了,本文主要讲述实际开发中经常会使用到的附件作为一个需求模块,从无到有,从有到逐步完善、封装的过程,目的是分享开发思路所以实现部分都是伪代码代替。
1.Data——从网络获取附件列表List<Attachment>
略...
2.CreateView Fragmet接收List<Attachment>并且渲染附件界面
首先创建AttachmentFragment和两个方法newInstance、loadAttachments,具体解释可以看注释。

/**
* 附件Fragment
*/
public class AttachmentFragment extends Fragment {
/**
* 接收附件数据
*
* @param list
* @return
*/
public static AttachmentFragment newInstance(List<Attachment> list) {
}
/**
* 渲染附件视图
*
* @param list
*/
private void loadAttachments(List<Attachment> list) {
}
}
效果如下:

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

/**
* 附件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 事件回调
可以根据自己的需求创建接口以实现回调方法。

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,这样是不是更灵活呢?
网友评论