小编jop*_*hde的帖子

非最终类中的代理最终方法

我需要在Android UI Framework中的各种视图类上代理方法,例如TextView.特别TextView#setText(int resId).此方法不是界面的一部分.因此,Java 代理将无法工作,因为它仅适用于接口.我需要使用字节码操作.

我发现了一个名为dexmaker的图书馆似乎很有希望.我假设我需要进行运行时字节代码操作,因为Android View类实际上只能在设备上使用.Dexmaker可以在具体类上代理公共方法.然后我注意到这TextView#setText(int resId)是莫名其妙的最终结果.在TextView类本身就是非final.

我想我可以派dexmaker来支持非final类的最终方法.这可能吗?如果不是,我不想启动这个项目.这对我的库来说是一个巨大的胜利,因为开发人员不需要为他们的视图提供子类,接口或手动静态方法调用.我的图书馆需要知道何时在特定视图上设置文本.代理是完美的设计模式.

java android bytecode-manipulation javassist

5
推荐指数
1
解决办法
1047
查看次数

将日历设置为月中的X日

我试图从一个由四个输入构建的Calendar对象中获得一分钟的时间:月份(第3天),白天(星期四),小时(1),分钟(30)和上午/下午.此外,如果时间是过去的一个月应该增加一个.

如何设置日历到这个时间?

这段代码似乎没有设定这一天.虽然小时,分钟和上午/下午设置正确.

日历设置:

long getTime() {
    Calendar calendar = Calendar.getInstance();

    calendar.set(Calendar.DAY_OF_WEEK_IN_MONTH, getDayOfWeekInMonth());
    calendar.set(Calendar.DAY_OF_WEEK, getDayOfWeek());
    calendar.set(Calendar.HOUR, getHour());
    calendar.set(Calendar.MINUTE, getMinute());
    calendar.set(Calendar.AM_PM, getAmPm());

    if (System.currentTimeMillis() > calendar.getTimeInMillis()) {
        calendar.add(Calendar.MONTH, 1);
    }

    return calendar.getTimeInMillis();

}

int getDayOfWeekInMonth() {
    return weekOfMonthSpinner.getSelectedItemPosition() + 1;
}

int getDayOfWeek() {
    switch(dayOfWeekSpinner.getSelectedItemPosition()) {
    case 0:
        return Calendar.SUNDAY;
    case 1:
        return Calendar.MONDAY;
    case 2:
        return Calendar.TUESDAY;
    case 3:
        return Calendar.WEDNESDAY;
    case 4:
        return Calendar.THURSDAY;
    case 5:
        return Calendar.FRIDAY;
    case 6:
        return Calendar.SATURDAY;
    default:
        return 0;
    }
}

int getHour() …
Run Code Online (Sandbox Code Playgroud)

java android

4
推荐指数
1
解决办法
2万
查看次数

标签 统计

android ×2

java ×2

bytecode-manipulation ×1

javassist ×1