Android-2019新项目个人最新工程结构(每个人都不一样,都怀揣梦想)

记录下最近的工程结构,之后如果有更好的再回味下...

之前的封装过程 MonkeyLei:Android-基本的MVP结构的模板工程(泛型,Rx通用请求,BaseAdapter实践目录链接)

以及完善后的工程NetNut/Android模板基础工程

就是目前新工程经过两个项目的重构,思考进行了完善,同时工程结构也发送了改变,采用分模块的形式(也就是分个人中心、首页,用户模块的形式,不再总得分activity, fragment, pop等结构):

image

总得结构

image

采用模块划分,更加适合团队合作开发

小萌新感觉这样更适合多人协同开发,而且公共的东西可以提出来,比如base模块就是大家都可以共用。后续还会针对其进行完善的,可能自己想做或者做错了呢! ! 嘻嘻....。

另外我的基础界面,如下

image

里面之前封装了点击事件(针对多次连续点击进行了处理),我增加了一个功能,就是如果一旦点击,则让这个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 clickListenerWeakReference;
    private HashMap 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增加呼吸效果,表面正在处理.....反正小萌新这么想的,也部分这样做了....

好吧,菜鸟自啄一把! 年前不知道还能不能更新几篇,“在这里祝大家新年快乐,万事如意。凡事开心就行,什么乱七八糟的无所谓啦!”“也希望自己能更坚持,更开心,更好,更幸福,更加不菜!希望家人幸福,爱人幸福,朋友幸福”

你可能感兴趣的:(Android-2019新项目个人最新工程结构(每个人都不一样,都怀揣梦想))