【问题标题】:How to add a date picker activity to a fragment in android studio (kotlin)如何将日期选择器活动添加到 android studio (kotlin) 中的片段
【发布时间】:2020-04-23 17:14:53
【问题描述】:

我是 Android Studio 的新手,不确定它是如何工作的。我希望能够从片段中的日期选择器中选择一个日期,但不确定如何执行此操作。

我的主要活动包含到所有 4 个片段的底部导航

class MainActivity : AppCompatActivity() {

private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener {item ->
    when(item.itemId){
        R.id.navigation_home -> {
            println("home pressed")
            replaceFragment(HomeFragment())
            return@OnNavigationItemSelectedListener true
        }
        R.id.navigation_social -> {
            println("social pressed")
            replaceFragment(SocialFragment())
            return@OnNavigationItemSelectedListener true
        }
        R.id.navigation_calendar -> {
            println("calendar pressed")
            replaceFragment(CalendarFragment())
            return@OnNavigationItemSelectedListener true
        }
        R.id.navigation_account -> {
            println("account pressed")
            replaceFragment(AccountFragment())
            return@OnNavigationItemSelectedListener true
        }
    }
    false
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    bottomNavigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
    replaceFragment(HomeFragment())
}

private fun replaceFragment(fragment: Fragment){
    val fragmentTransaction = supportFragmentManager.beginTransaction()
    fragmentTransaction.replace(R.id.fragmentContainer, fragment)
    fragmentTransaction.commit()
}

在日历片段中,我创建了一个 DatePicker,如下所示:

<DatePicker
            android:id="@+id/Date_Picker"
            android:datePickerMode="calendar"
            android:layout_width="wrap_content"
            android:layout_height="400dp"
            android:background="@drawable/curved_frame"
            android:headerBackground="#FFFFFF"
            android:translationY="-80dp"></DatePicker>

我希望能够从日历中选择一个日期,但我不知道将这段代码放在哪里。我有以下代码用于选择日期,但不知道放在哪里:

override fun onCreate(savedInstanceState: Bundle?){
    super.onCreate(savedInstanceState)
    setContentView(R.layout.fragment_calendar)

    val datePicker = findViewById<DatePicker>(R.id.Date_Picker)
    val today = Calendar.getInstance()
    datePicker.init(today.get(Calendar.YEAR), today.get(Calendar.MONTH), today.get(Calendar.DAY_OF_MONTH))

    { view, year, month, day ->
        val month = month + 1
        val msg = "You selected: $day/$month/$year"
        Toast.makeText(this@fragment_calendar, msg, Toast.LENGTH_SHORT).show()
    }
}

我应该创建一个新活动并调用日历片段还是应该将此代码放在日历片段中? 谢谢

我已经添加了下面的代码,但是当我点击我的日期选择器上的一个日期时它仍然没有做任何事情。

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    val datePicker = view?.findViewById<DatePicker>(R.id.Date_Picker)
    val today = Calendar.getInstance()
    println(today)
    datePicker?.init(today.get(Calendar.YEAR), today.get(Calendar.MONTH), today.get(Calendar.DAY_OF_MONTH), object : DatePicker.OnDateChangedListener{
        override fun onDateChanged(
            view: DatePicker?,
            year: Int,
            monthOfYear: Int,
            dayOfMonth: Int
            ) {
                print(dayOfMonth)
            }
        })
    }

    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_calendar, container, false)
}

【问题讨论】:

    标签: android android-fragments android-activity android-datepicker


    【解决方案1】:

    您可以在初始化它的同一fragment/Activity 中使用onDateChangeListener。您可以在 onCreate 中添加以下代码:

     datePicker.init(today.get(Calendar.YEAR), today.get(Calendar.MONTH), today.get(Calendar.DAY_OF_MONTH), object : DatePicker.OnDateChangedListener{
                override fun onDateChanged(
                    view: DatePicker?,
                    year: Int,
                    monthOfYear: Int,
                    dayOfMonth: Int
                ) {
                    //Set the date here
                    Log.d("DATE", "Date Listener called")
                }
    
            })
    

    希望这会有所帮助。

    【讨论】:

    • 感谢您的帮助。我在 CalendarFragment.kt 片段中添加了一个 onCreate 函数并添加了此代码,但无法识别“datePicker”并以红色显示。你认为问题可能是什么?谢谢
    • @cstephlee 您是否在初始化 datePicker 之后或之前添加了此内容。您可能需要将其包围在 if 语句中以检查版本
    • 我已经用 if 语句进行了初始化,但它仍然不起作用。我尝试在日期更改时打印它,但它没有在控制台上打印任何内容。我已经添加了我在帖子中尝试过的代码
    • @cstephlee 检查我更新的答案,您可以在 init 本身中使用侦听器。如果我的回答对您有帮助,请接受它作为答案并点赞。
    • 我修改了它,但是当我选择一个日期时它仍然没有做任何事情
    猜你喜欢
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多