记录下最近的工程结构,之后如果有更好的再回味下...
之前的封装过程 MonkeyLei:Android-基本的MVP结构的模板工程(泛型,Rx通用请求,BaseAdapter实践目录链接)
以及完善后的工程NetNut/Android模板基础工程
就是目前新工程经过两个项目的重构,思考进行了完善,同时工程结构也发送了改变,采用分模块的形式(也就是分个人中心、首页,用户模块的形式,不再总得分activity, fragment, pop等结构):

<figcaption style="margin-top: 0.66667em; padding: 0px 1em; font-size: 0.9em; line-height: 1.5; text-align: center; color: rgb(153, 153, 153);">总得结构</figcaption>

<figcaption style="margin-top: 0.66667em; padding: 0px 1em; font-size: 0.9em; line-height: 1.5; text-align: center; color: rgb(153, 153, 153);">采用模块划分,更加适合团队合作开发</figcaption>
小萌新感觉这样更适合多人协同开发,而且公共的东西可以提出来,比如base模块就是大家都可以共用。后续还会针对其进行完善的,可能自己想做或者做错了呢! ! 嘻嘻....。
另外我的基础界面,如下

里面之前封装了点击事件(针对多次连续点击进行了处理),我增加了一个功能,就是如果一旦点击,则让这个view禁止点击(xxxview.setEnabled(false)), 当结束网络请求(不管失败还是成功)或者说点击进行了页面跳转等其他操作,此时恢复按钮点击事件(xxxview.setEnabled(true))。
简单看下吧 BaseViewOnClickListener.java :
import android.view.View;
import java.lang.ref.WeakReference;
import java.util.HashMap;
/*
*@Description: 点击事件封装,避免重复点击
*@Author: hl
*@Time: 2018/6/14 10:18
*/
public class BaseViewOnClickListener implements View.OnClickListener {
private long mLastClickTime = 0;
private static final int TIME_INTERVAL = 1000;
private WeakReference<View.OnClickListener> clickListenerWeakReference;
private HashMap<View, Boolean> viewHashMap = new HashMap<>();
public BaseViewOnClickListener(View.OnClickListener viewOnclick){
this.clickListenerWeakReference = new WeakReference<>(viewOnclick);
}
@Override
public void onClick(View view) {
if ((System.currentTimeMillis() - mLastClickTime) >= TIME_INTERVAL) {
///< 禁止多次点击
if (viewHashMap.containsKey(view) && viewHashMap.get(view)){
return;
}
viewHashMap.put(view, true);
view.setEnabled(false);
clickListenerWeakReference.get().onClick(view);
mLastClickTime = System.currentTimeMillis();
}
}
/**
* 释放让其可点击
*/
public void enableClick(){
for(View key: viewHashMap.keySet())
{
if (viewHashMap.get(key)){
key.setEnabled(true);
viewHashMap.put(key, false);
}
}
}
}
然后再基础界面里面处理下(主要是点击事件相关处理部分,其他的基础界面大家应该都有自己的处理方式了)比如 BaseAppCompatActivity.java :
@Override
public void onComplete() {
if (null != baseViewOnClickListener){
baseViewOnClickListener.enableClick();
}
}
/**
* 初始化监听事件
* @param viewOnclick
*/
protected void initOnClickEvent(View.OnClickListener viewOnclick){
baseViewOnClickListener = new BaseViewOnClickListener(viewOnclick);
}
/**
* 设置控件监听事件
* @param views
*/
protected void setOnClickEvent(View... views){
for (View view : views){
viewList.add(view);
view.setOnClickListener(baseViewOnClickListener);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
onComplete();
for (int i = 0; i < viewList.size(); ++i){
if (null != viewList.get(i)){
viewList.get(i).setOnClickListener(null);
}
}
viewList.clear();
}
我再想,或者还有什么更牛皮的方式来针对这个UI和事件进行捆绑,再琢磨琢磨吧。。。目前网络请求其实已经进行了捆绑,点击禁止再次点击,然后通用网络请求结束自行放开点击。还不错。 如果点击事件是进行页面跳转(销毁页面的情况,也会自动恢复,清楚点击等操作)。 基本上问题不大了! 能避免很多问题。。。如果可能的话,还可以给view增加呼吸效果,表面正在处理.....反正小萌新这么想的,也部分这样做了....
好吧,菜鸟自啄一把! 年前不知道还能不能更新几篇,“在这里祝大家新年快乐,万事如意。凡事开心就行,什么乱七八糟的无所谓啦!”“也希望自己能更坚持,更开心,更好,更幸福,更加不菜!希望家人幸福,爱人幸福,朋友幸福”
网友评论