안녕하세요. 현재 제가 DB에서 날짜를 조회해서 매일매일 다른 시간에 Button이 여러개 생겨야 해서 LinearLayout에 Button을 동적할당 시키고자 합니다.
제가 RecyclerView에 Adapter를 이용하여 xml파일을 inflate 시켜서 나타나게 하는건 했는데,
혹시 LinearLayout에 Adapter를 사용하여 Button을 동적할당 하는게 가능할까요?
인터넷에 관련된 내용들을 여러번 검색해봤는데 이렇다 할 내용을 못찾아서요.ㅠㅠ
RecyclerView에 Adapter를 사용해서 작성한 코드는 아래와 같습니다.
LinearLayout에 Adapter를 사용하는게 가능하다면 이와 비슷하게 코드를 작성하면 될까요?
MainActivity.java
linearLayoutManager = new LinearLayoutManager(this, RecyclerView.VERTICAL, false);
rv_calendar_list.setLayoutManager(linearLayoutManager);
SqlHelper.calendarAdapter = new CalendarRecyclerAdapter();
SqlHelper.calendarAdapter.setOnClickListener(this);
rv_calendar_list.setAdapter(SqlHelper.calendarAdapter);
CalendarRecyclerAdapter.java
public class CalendarRecyclerAdapter extends RecyclerView.Adapter<CalendarRecyclerAdapter.ItemViewHolder> {
private ArrayList<DateData> listData = new ArrayList<>();
private MyRecyclerViewClickListener mListener;
private Context context;
public interface MyRecyclerViewClickListener {
void onItemClicked(int position);
}
public void setOnClickListener(MyRecyclerViewClickListener listener) {
mListener = listener;
}
@NonNull
@Override
public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
// LayoutInflater 를 이용하여 전 단계에서 만들었던 day_list.xml 을 inflate 시킴
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.day_list, parent, false);
context = parent.getContext();
return new ItemViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {
holder.onBind(listData.get(position));
if(mListener != null) {
final int pos = position;
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mListener.onItemClicked(pos);
}
});
}
}
@Override
public int getItemCount() {
return listData.size();
}
public void addItem(DateData data) {
listData.add(data);
}
public void clear() {
listData.clear();
}
// RecyclerView 의 핵심인 ViewHolder
// 여기서 subView 를 setting 해줌
class ItemViewHolder extends RecyclerView.ViewHolder {
private final TextView tv_title;
private final TextView tv_time;
private final TextView tv_name;
public ItemViewHolder(@NonNull View itemView) {
super(itemView);
tv_title = itemView.findViewById(R.id.tv_title);
tv_time = itemView.findViewById(R.id.tv_time);
tv_name = itemView.findViewById(R.id.tv_name);
}
void onBind(final DateData data) {
tv_title.setText(data.getMeetingTitle());
tv_time.setText(data.getStartTime() + "~" + data.getEndTime());
tv_name.setText(data.getMeetingName());
}
}
}