【问题标题】:Android : Java/Kotlin Calendar special appearAndroid : Java/Kotlin 日历特别出现
【发布时间】:2017-08-30 18:17:41
【问题描述】:

我在日历中工作出现在 ListView 我有一个元素的参考类

internal class MyItem {
var name: String? = null
var number: String? = null
var nameDay:String? = null

}

在 MainActivity 我创建 ArrayList 来保存元素并从日历中获取实例

private var arrayList: ArrayList<MyItem>? = null
private var cal:Calendar= Calendar.getInstance()

从 onCreate 函数调用到填充的 ArrayList 像这样

private fun loaddata() {

变量准确地告诉我们一个月的天数

var maxDays:Int = cal.getActualMaximum(Calendar.DAY_OF_MONTH)

变量给我们带来了一个完整的日期

var today:Int = cal.get(Calendar.DATE)

一些 FormatSimpleDate

var sdfDay:SimpleDateFormat = SimpleDateFormat("dd")
var sdfNamDay:SimpleDateFormat = SimpleDateFormat("E")
var sdfMonth:SimpleDateFormat = SimpleDateFormat("MMM")

然后我循环 45 天

for( i in 0.. 45){
        val myItem = MyItem()

        myItem.name = sdfMonth.format(cal.time)
        myItem.number = sdfDay.format(cal.time)
        myItem.nameDay = sdfNamDay.format(cal.time)
        cal.add(Calendar.DATE,1)
        arrayList!!.add(myItem)
    }

输出类似

AUG Wed 30 / AUG Thu 31 / Sep Fri 01 / Sep Sat 02 / ... / Sep Sat 30 / Oct Sun 01 / Oct Mon 02 / etc

该功能完美运行,没有任何错误 但我想在第一排月日出现在我面前 在第二行开始只显示一天,直到月份变化 如果月份更改为下一个 显示在行月和日 仅在下一行演出日 像这样

AUG Wed 30 / Thu 31 / Sep Fri 01 / Sat 02 / ... / Sat 30 / Oct Sun 01 / Mon 02 / etc

我做了不止一个 if 语句
但效果不好

任何人都可以帮助我吗

【问题讨论】:

    标签: java android calendar kotlin


    【解决方案1】:

    你可能不再需要它了,但是在这里你可以使用更多的代码 kotliny/functional:

    我用 vals 替换了所有的 vars 并摆脱了所有的 null 分配。您需要的关键功能是对项目列表的 groupBy 调用。

    import java.util.Calendar
    import java.text.SimpleDateFormat
    
    data class Item(
            val month: String,
            val number: String,
            val nameDay: String
    ) {
        val printDay = "$nameDay $number"
    }
    
    fun main(args: Array<String>) {
    
        val cal: Calendar = Calendar.getInstance()
    
        val maxDays: Int = cal.getActualMaximum(Calendar.DAY_OF_MONTH)
        val sdfDay: SimpleDateFormat = SimpleDateFormat("dd")
        val sdfNamDay: SimpleDateFormat = SimpleDateFormat("E")
        val sdfMonth: SimpleDateFormat = SimpleDateFormat("MMM")
    
        val items = (0..45).map {
            val item = Item(
                    sdfMonth.format(cal.time),
                    sdfDay.format(cal.time),
                    sdfNamDay.format(cal.time)
            )
            cal.add(Calendar.DATE, 1)
            item
        }.groupBy {
            it.month
        }.entries.fold("", { acc, item ->
            acc + item.key + ": " + item.value.map { it.printDay }.joinToString(" / ") + "\n"
        })
    
        println(items)
    }
    

    【讨论】:

      猜你喜欢
      • 2019-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 2021-12-20
      • 2014-07-21
      • 2014-01-10
      • 1970-01-01
      相关资源
      最近更新 更多