我有一个函数,可以用一个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。
答案 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
}