package com.example.two;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import java.time.LocalDate;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity implements CalendarAdapter.OnItemListener
{
private TextView monthYearText;
private RecyclerView calendarRecyclerView;
public LocalDate selectedDate;
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initWidgets();
selectedDate=LocalDate.now();
setMonthView();
}
private void initWidgets()
{
calendarRecyclerView=findViewById(R.id.calendarRecyclerView);
monthYearText=findViewById(R.id.monthYearTV);
}
@RequiresApi(api = Build.VERSION_CODES.O)
private void setMonthView()
{
monthYearText.setText(monthYearFromDate(selectedDate));
ArrayList<String> daysInMonth = daysInMonthArray(selectedDate);
CalendarAdapter calendarAdapter=new CalendarAdapter(daysInMonth,this);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(), 7);
calendarRecyclerView.setLayoutManager(layoutManager);
calendarRecyclerView.setAdapter(calendarAdapter);
}
@RequiresApi(api = Build.VERSION_CODES.O)
private ArrayList<String> daysInMonthArray(LocalDate selectedDate)
{
ArrayList<String> daysInMonthArray =new ArrayList<>();
TemporalAccessor date = null;
YearMonth yearMonth= YearMonth.from(date);
int daysInMonth=yearMonth.lengthOfMonth();
LocalDate firstOfMonth = selectedDate.withDayOfMonth(1);
int dayOfweek = firstOfMonth.getDayOfWeek().getValue();
for(int i=1; i<=42; i++)
{
if(i<=dayOfweek || i>daysInMonth + dayOfweek)
{
daysInMonthArray.add("");
}
else
{
daysInMonthArray.add(String.valueOf(i-dayOfweek));
}
}
return daysInMonthArray;
}
@RequiresApi(api = Build.VERSION_CODES.O)
private String monthYearFromDate(LocalDate date)
{
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("MMMM yyyy");
return date.format(formatter);
}
@RequiresApi(api = Build.VERSION_CODES.O)
public void previousMonthAction(View view)
{
selectedDate=selectedDate.minusMonths(1);
setMonthView();
}
@RequiresApi(api = Build.VERSION_CODES.O)
public void nextMonthAction(View view)
{
selectedDate = selectedDate.plusMonths(1);
setMonthView();
}
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onItemClick(int position, String dayText)
{
if(dayText.equals(""))
{
String message="Selected Date"+ dayText+""+monthYearFromDate(selectedDate);
Toast.makeText(this,message,Toast.LENGTH_LONG).show();
}
}
}
왜 LocalDate.now(); 가 안되는걸까요...?
2021-09-29 18:31:15.578 3777-3777/com.example.two E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.two, PID: 3777
java.lang.NoClassDefFoundError: Failed resolution of: Ljava/time/LocalDate;
at com.example.two.MainActivity.onCreate(MainActivity.java:35)