我当前正在创建一个自定义对话框来显示从00:00到23:59的时间,我使用kotlin作为开发语言。我的问题是,当我打开对话框时,回收站视图上会出现错误。这是我的代码
日历对话框类
class CalendarDialog : DialogFragment() {
/**
* Define variables
*/
private val mDaysList : MutableList<Days> = ArrayList()
private val dayMonthYear = "2018-06-14" //TODO fetch the date of today
/**
* Initialize the adapter
*/
private val adapter = CalendarAdapter(mDaysList)
/**
* Initialize the layout manager
*/
private fun getLinearLayoutManager(): LinearLayoutManager {
return LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false)
}
private fun initView() {
setDataListItems()
recyclerViewCalendar?.adapter = adapter
recyclerViewCalendar?.layoutManager = getLinearLayoutManager()
recyclerViewCalendar?.setHasFixedSize(true)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val rootView = inflater.inflate(R.layout.calendar_dialog, container)
initView()
return rootView
}
/**
* TODO dependendo do horário da clinica bloqueio e desbloqueio horários
*/
private fun setDataListItems() {
mDaysList.add(Days("06:00", dayMonthYear))
mDaysList.add(Days("06:30", dayMonthYear))
mDaysList.add(Days("07:00", dayMonthYear))
mDaysList.add(Days("07:30", dayMonthYear))
mDaysList.add(Days("08:00", dayMonthYear))
mDaysList.add(Days("08:30", dayMonthYear))
mDaysList.add(Days("09:00", dayMonthYear))
mDaysList.add(Days("09:30", dayMonthYear))
mDaysList.add(Days("10:00", dayMonthYear))
mDaysList.add(Days("10:30", dayMonthYear))
mDaysList.add(Days("11:00", dayMonthYear))
mDaysList.add(Days("11:30", dayMonthYear))
mDaysList.add(Days("12:00", dayMonthYear))
mDaysList.add(Days("12:30", dayMonthYear))
mDaysList.add(Days("13:00", dayMonthYear))
mDaysList.add(Days("13:30", dayMonthYear))
mDaysList.add(Days("14:00", dayMonthYear))
mDaysList.add(Days("14:30", dayMonthYear))
mDaysList.add(Days("15:00", dayMonthYear))
mDaysList.add(Days("15:30", dayMonthYear))
mDaysList.add(Days("16:00", dayMonthYear))
mDaysList.add(Days("16:30", dayMonthYear))
mDaysList.add(Days("17:00", dayMonthYear))
mDaysList.add(Days("17:30", dayMonthYear))
mDaysList.add(Days("18:00", dayMonthYear))
mDaysList.add(Days("18:30", dayMonthYear))
mDaysList.add(Days("19:00", dayMonthYear))
mDaysList.add(Days("19:30", dayMonthYear))
mDaysList.add(Days("20:00", dayMonthYear))
mDaysList.add(Days("20:30", dayMonthYear))
}
}
Item.xml
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="16dp"
android:paddingRight="16dp">
<android.support.design.widget.TextInputLayout
android:id="@+id/client_id_input_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toTopOf="@+id/guideline"
android:layout_marginRight="8dp"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginLeft="8dp"
app:layout_constraintLeft_toLeftOf="parent">
<TextView
android:id="@+id/hourOfDay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="monospace"
android:gravity="center"
android:text="00:00"
android:textColor="@color/picker_default_selected_text_color"
android:textSize="36sp"
android:textStyle="bold" />
</android.support.design.widget.TextInputLayout>
<android.support.constraint.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/guideline"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.5"/>
<TextView
android:id="@+id/day_month_year"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:text="22 Agosto 2018"
android:textStyle="bold|italic"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline" />
</android.support.constraint.ConstraintLayout>
模型类
data class Days(var hourOfDay:String ,var dayMonthYear:String)
日历对话框布局xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#f4f2f2"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerViewCalendar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</android.support.constraint.ConstraintLayout>
片段类(我在其中调用对话框)
class BlockSchedulesFragment : BaseFragment<BlockSchedulesViewModel>() {
/**
* Call this fragment in the parent activity
*/
companion object {
fun newInstance() = BlockSchedulesFragment()
}
/**
* Base fragment methods
*/
override fun layoutToInflate() = R.layout.fragment_block_shedules_screen
override fun definedViewModel() = ViewModelProviders.of(this, Injection.provideViewModelBlockerFactory(context))
.get(BlockSchedulesViewModel::class.java)
override fun doOnCreated(savedInstanceState: Bundle?) {
//I do the call to the dialog here
val fm = fragmentManager
val tv = CalendarDialog()
open_calendar_btn.setOnClickListener {
tv.show(fm,"TV_tag")
}
confirm_block.setOnClickListener {
Toast.makeText(activity,"Bloqueio efectuado",Toast.LENGTH_SHORT).show()
}
}
}
答案 0 :(得分:2)
在创建视图之前,您正在调用initView
方法(可访问RecyclerView)。尝试在您的onViewCreated
方法中调用它,该方法在创建视图后被称为 。届时,您的RecyclerView不应为空。