如何从Android弹出窗口中的父活动启动日历

时间:2019-07-06 22:36:31

标签: android kotlin

我有一个函数,可以用一个Calendarup CalendarView启动一个弹出窗口。我必须在弹出窗口上初始化日历才能显示,但是我无法在xml文件中初始化日历,它必须在活动中。

我已经尝试从不是父级活动的活动中获取初始化,并且收到错误消息,指出“必须至少显示一个月。您是否忘记了调用init()?”。我只是从父活动中尝试过,但是我意识到我没有将任何初始化发送到弹出窗口,所以我遇到了同样的错误。

这是我的xml文件代码

from .models import Article

class ArticleView(DetailView):
    template_name = "article/article.html"
    model = Article

    def related_articles(self):
        tagged = Article.objects.filter(tag=self.tag)
        
        return tagged

这是我的Pop活动(而不是父活动)中的功能。我意识到,如果我可以在家长活动中使用此功能并发送初始化后的datePicker,我可能会得到所需的信息。

{% if articles.objects.all %}
  {% for article in article.objects.all|related_articles %}
  <div>
    <img src="{{ article.thumbnail.url }}">
    <span>{{ article.title }}</span>
  </div>
  {% endfor %}
{% endif %}

我希望从弹出窗口中获取一个日期数组,该日期可以分配给我在父活动中拥有的两个DatePicker。

1 个答案:

答案 0 :(得分:0)

答案是使用片段,在显示为v.findViewById(R.id.year_view ...)作为CalendarView的行上,您将获得要使用的视图,在这种情况下,该视图就是日历。如果单独使用它,则仅获取id即可得到空指针异常。我的朋友们是从片段初始化Widget的方法。

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?): View? {
    val v = inflater.inflate(R.layout.fragment_dialog_date_frament, container, false)

    val today = Date()
    val nextYear = Calendar.getInstance()
    nextYear.add(Calendar.YEAR, 1)
    val mCalendarPickerView = v.findViewById<View>(R.id.year_view_calendar) as CalendarPickerView

    mCalendarPickerView.init(today, nextYear.time)
        .inMode(CalendarPickerView.SelectionMode.RANGE)


    mCalendarPickerView.setOnDateSelectedListener(object : CalendarPickerView.OnDateSelectedListener {
        override fun onDateSelected(date: Date) {
            val calSelected = Calendar.getInstance()
            calSelected.time = date

            val selectedDate =
                "" + calSelected.get(Calendar.DAY_OF_MONTH) + " " + (calSelected.get(Calendar.MONTH) + 1) + " " + calSelected.get(
                    Calendar.YEAR
                )
            Toast.makeText(context, selectedDate, Toast.LENGTH_LONG).show()
        }

        override fun onDateUnselected(date: Date) {

        }

    })

    return v
}