public class SignNoticeItem implements Serializable {
private final String id, title, content, date;
public SignNoticeItem(String id, String title, String content, String date) {
this.id = id;
this.title = title;
this.content = content;
this.date = date;
}
public String getId() {
return id;
}
public String getTitle() {
return title;
}
public String getContent() {
return content;
}
public String getDate() {
return date;
}
}
public class SignNoticeAdapter extends ArrayAdapter<SignNoticeItem> {
private final LayoutInflater layoutInflater;
private List<SignNoticeItem> items = new ArrayList<>();
public SignNoticeAdapter(@NonNull Context context, List<SignNoticeItem> items) {
super(context, R.layout.item_sign_notice, items);
layoutInflater = LayoutInflater.from(context);
this.items = items;
}
public void submitList(List<SignNoticeItem> items) {
this.items = items;
notifyDataSetChanged();
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.item_sign_notice, parent, false);
viewHolder = new ViewHolder(
convertView.findViewById(R.id.notice_num),
convertView.findViewById(R.id.notice_title)
);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.bindItem(items.get(position));
return convertView;
}
static class ViewHolder {
private final TextView numText, titleText;
public ViewHolder(TextView numText, TextView titleText) {
this.numText = numText;
this.titleText = titleText;
}
public void bindItem(SignNoticeItem item) {
numText.setText(item.getId());
titleText.setText(item.getTitle());
}
}
}
public class SignNoticeFragment extends Fragment {
private ListView listView;
private SignNoticeAdapter signNoticeAdapter;
private static final String ENDPOINT = "http://capstudyapp.dothome.co.kr/example";
public SignNoticeFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_sign_notice, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
...
listView.setOnItemClickListener((adapterView, view1, position, id) -> {
goToSingNoticeDetails(position);
});
}
private void goToSingNoticeDetails(int position) {
Intent intent = new Intent(requireContext(), SignNoticeDetailsActivity.class);
intent.putExtra(SignNoticeDetailsActivity.EXTRA_ITEM, signNoticeAdapter.getItem(position));
startActivity(intent);
}
public void retrieveData() {
...
}
}
public class SignNoticeDetailsActivity extends AppCompatActivity {
public static final String EXTRA_ITEM = "SingNoticeItem";
private TextView titleText;
private TextView dateText;
private TextView contentText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_notice_details);
setupViews();
bindItem();
}
private void setupViews() {
titleText = findViewById(R.id.title_tv);
contentText = findViewById(R.id.content_tv);
dateText = findViewById(R.id.date_tv);
}
private void bindItem() {
SignNoticeItem signNoticeItem = (SignNoticeItem) getIntent().getSerializableExtra(EXTRA_ITEM);
titleText.setText(signNoticeItem.getTitle());
contentText.setText(signNoticeItem.getContent());
dateText.setText(signNoticeItem.getDate());
}
}
아직 더 깔끔하게 할 수 있는 부분들이 좀 있지만, 이 정도로 해도 가독성과 코드 유지보수가 나아질 것 같습니다.