RecyclerViewCalendar不得为空

时间:2018-09-05 13:37:53

标签: android android-fragments android-recyclerview kotlin android-lifecycle

我当前正在创建一个自定义对话框来显示从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()
        }

    }
}

1 个答案:

答案 0 :(得分:2)

在创建视图之前,您正在调用initView方法(可访问RecyclerView)。尝试在您的onViewCreated方法中调用它,该方法在创建视图后被称为 。届时,您的RecyclerView不应为空。