【选择图片Jar】感受”MVC”魅力-扩展选择数量(七)

1.前言

上篇文章是说会带来本Jar的第一次扩展。本次扩展的是规定选择数量上限!

需求分析,我们选择图片无外乎两种情况:
第一种:选择多张图片,作为附件上传;
第二种:选择一张图片,作为头像,然后再上传。

因此衍生出我们扩展的需求:
1.多选模式 设置选择图片数量上限
2.单选模式 选择图片完成后 然后回调处理

这个时候,MVC的魅力就来了。我们仅需要在C中改少量代码,即可完成我们的需求!

接下来我们一步一步分析,我们修改了什么代码,或者添加了什么!

2.新的构造方法

    /**
     * 单选模式
     */
    public static int SINGLE_MODE = 0x123456;
    /**
     * 多选模式
     */
    public static int MUTIPLE_MODE = 0x654321;
    /**
     * 当前模式
     */
    private int mModeState;
    /**
     * 选择图片的最大张数
     */
    private int mChosenMaxSize;
    /**
     * 选择图片的计数器
     */
    private int mChosenCount = 0;

    public GalleryViewController(int mode, int maxSize) {
        mChosenSpArr = new SparseArray<String>();
        //---新增以下代码---//
        mChosenMaxSize = maxSize;
        // 如果不是这两种模式的一种,默认为多选模式
        if (mode != SINGLE_MODE || mode != MUTIPLE_MODE) {
            mModeState = MUTIPLE_MODE;
        } else {
            mModeState = mode;
        }
        // 如果是单选模式 强制只能选择一张
        if (mode == SINGLE_MODE) {
            mChosenMaxSize = 1;
        }
    }

OK!我们添加了几个必要的参数作为,并且构造方法新增了一些代码! 也不是很多而已。相信大家都能看懂。

3.单选模式

经过上面的构造方法,规定了是单选模式还是多选模式。我们现在来想想,还需要添加什么才能够完成我们的需求。

在上面的分析写到,如果是单选,选择则直接回调接口。

因此我们还需要对外暴露一个回调接口。(PS:如果新手对回调思想不理解,请查阅相关知识。 或者尝试理解以下代码)

所以,我们需要添加以下代码:

    /**
     * 单选模式回调
     */
    private OnSingleModeClickListener mSingleModeClickListener;

    public void setSingleModeListener(OnSingleModeClickListener listener) {
        mSingleModeClickListener = listener;
    }

    public interface OnSingleModeClickListener {
        void onClick(int position);
    }

然后我们还需要处理哪里呢?

没错,就是click方法里面的判断,添加以下代码:

public void click(int position) {
        // 如果是单选模式
        if (mModeState == SINGLE_MODE) {
            if (mSingleModeClickListener == null) {
                throw new IllegalArgumentException(
                        "OnSingleModeClickListener is null,you shuold inovke setSingleModeListener first");
            }
            mSingleModeClickListener.onClick(position);

            //多选模式
        } else if (mModeState == MUTIPLE_MODE) {
            ...//原来的代码
                }
            }
        }
    }

你看 我们只需要在这里加上这一点代码就OK了!
然后我们使用起来也非常简单:

mController = new GalleryViewController(
                GalleryViewController.SINGLE_MODE, 1);
mController.setSingleModeListener(new 
        OnSingleModeClickListener() {
            @Override
            public void onClick(int position) {
                // 逻辑处理~
            }
        });

当然啦,这里可以不单单穿position,也可以带上这个图片的路径,那回调接口就要改成:

public interface OnSingleModeClickListener {
    void onClick(int position, String path);
}

click代码就要改成:

mSingleModeClickListener.onClick(position, mPaths.get(position));

所以要什么都可以自己加!~

4.多选模式

现在我们来想想多选模式还缺少什么? 好像并不需要像单选加那么多东西了。我们仅需要判断一下当前数量数和最大数量就可以了!!

if (flag) {
    ...
    mChosenCount--;
} else {
    if (mChosenCount == mChosenMaxSize) {
        //弹出一个Toast提示只能选择mChosenMaxSize张图片
        return;
    }
    ...
    mChosenCount++;
}

没错 多选模式就只要加这么一点点! 是不是出乎自己的意料呢!所以一个合理的开发模式,是高效开发和扩展的保障!

5.结束语

至此,一个选择图片已经完成80%了!是不是有点小激动呢! 那么还有20%呢?

还记得这只是第一次扩展吧? 接下来的第二次扩展,将是为了业务逻辑而扩展,更加符合我们实际需求。

卖个关子先~~ 红红火火恍恍惚惚

OK!这篇文章就到这里!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值