Невозможно реализовать пользовательскую библиотеку представления календаря в Android Java - PullRequest
1 голос
/ 08 октября 2019

Я хочу использовать это представление календаря в моем Android-приложении Java. https://github.com/kizitonwose/CalendarView

Сначала я попробовал себя, прежде чем приехать сюда, но я не смог реализовать это в Java, так как документация для Kotlin.

Кто-то, пожалуйста, помогите мне, я застрял на шаге 2.

Шаг 2:

Код документации Kotlin:

class DayViewContainer(view: View) : ViewContainer(view) {
    val textView = view.calendarDayText
}

Мой эквивалентный код Java:

class DayViewContainer extends ViewContainer {

    public DayViewContainer(View view) {
        super(view);
        final TextView calendar_day_text = view.findViewById(R.id.calendarDayText);
    }
}

Код документации Kotlin:

calendarView.dayBinder = object : DayBinder<DayViewContainer> {
    // Called only when a new container is needed.
    override fun create(view: View) = DayViewContainer(view)
    // Called every time we need to reuse a container.
    override fun bind(container: DayViewContainer, day: CalendarDay) {
        container.textView.text = day.date.dayOfMonth.toString()
    }
}

Мой Java эквивалентный код:

calendarView.setDayBinder(new DayBinder<DayViewContainer>(){

    @Override
        public DayViewContainer create(View view) {
        return new DayViewContainer(view);
    }

    @Override
    public void bind(DayViewContainer dayViewContainer, CalendarDay calendarDay) {
        TextView textView = 
         dayViewContainer.getView().findViewById(R.id.calendarDayText);
        textView.setText(calendarDay.getDate().getDayOfMonth());
    }
});

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Спасибо, ребята, за проявленную здесь озабоченность.

Я понял это.

Ошибка заключалась в том, что я не преобразовывал целочисленные дни в строку, чтобы использовать ее в качестве текста в TextView. Коррекция здесь в следующей строке:

textView.setText(Integer.toString(calendarDay.getDate().getDayOfMonth()));
0 голосов
/ 08 октября 2019

DayViewContainer должен сделать TextView переменной-членом, чтобы вы могли получить к ней доступ. Вы можете сделать для него геттер, но для таких простых классов, как я, я предпочитаю сделать поля public final для его упрощения.

class DayViewContainer extends ViewContainer {

    public final TextView calendarDayText;

    public DayViewContainer(View view) {
        super(view);
        calendarDayText = view.findViewById(R.id.calendarDayText);
    }
}

И так как вы вызываете свой собственный код Java, и мысделав это поле участника общедоступным, вам не нужно вызывать его для получения в своем DayBinder:

@Override
public void bind(DayViewContainer dayViewContainer, CalendarDay calendarDay) {
    dayViewContainer.calendarDayText.setText(calendarDay.getDate().getDayOfMonth());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...