Как добавить действие выбора даты в фрагмент в android studio (kotlin) - PullRequest
0 голосов
/ 23 апреля 2020

Я новичок в 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)
}

1 Ответ

0 голосов
/ 23 апреля 2020

Вы можете использовать onDateChangeListener в том же fragment / Activity, где вы его инициализировали. Вы можете добавить следующий код в 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")
            }

        })

Надеюсь, это поможет.

...