[안드로이드] 조금 더 어렵게 가보자. ListFragment로 만드는 Custom ListView
728x90
반응형

점점 익숙해져간다.

프래그먼트에 대해 겁이 없어진다.

공부하면서 이정도 얻은 것만도 큰 감동이다.


어떻게 만들것인지 레이아웃이 머릿속에 그려지면

프래그먼트 구성은 이제 쉽게 할 수 있다.

이번에는 item.java를 만들어서 get/set을 만들어 볼 예정이다.

  1. 프래그먼트를 만든다.
  2. main.xml에 만든 프래그먼트를 구성한다.
  3. fragment.xml에 추가 구성을 한다.
  4. item.java에 get/set을 만든다.
  5. BaseAdapter를 상속받는 adapter.java를 만든다.
    1. getView가 가장 중요하다
    2. context를 선언하고 inflate해서 convertView 참조 획득
    3. convertView로 위젯 참조 획득
    4. dataSet인 listViewItemList로부터 data 추출
    5. 데이터 반영
    6. addItem : 아이템 데이터 추가를 위한 함수. 개발자가 원하는대로 작성 가능.
  6. 만든 adapter를 Fragment에 세팅한다.
  7. onListItemClick 만들기
  8. mainActivity에 Fragment 추가
  9. 이미지 파일이 없어서 결국 이미지 객체 제외 작업 (ㅋㅋ)

<adapter.java>

package com.jongkook.android.fragment_practice_3;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;

public class CustomAdapter extends BaseAdapter {

// Adapter에 추가된 데이터를 저장하기 위한 ArrayList
private ArrayList<ListViewItem> listViewItems = new ArrayList<>();
Context context;


// ListViewAdapter의 생성자
public CustomAdapter(){

}

// Adapter에 사용되는 데이터의 개수를 리턴. : 필수 구현
@Override
public int getCount() {
return listViewItems.size();
}

// 지정한 위치(position)에 있는 데이터 리턴 : 필수 구현
@Override
public Object getItem(int position) {
return listViewItems.get(position);
}

// 지정한 위치(position)에 있는 데이터와 관계된 아이템(row)의 ID를 리턴. : 필수 구현
@Override
public long getItemId(int position) {
return position;
}

// position에 위치한 데이터를 화면에 출력하는데 사용될 View를 리턴. : 필수 구현
@Override
public View getView(int position, View convertView, ViewGroup parent) {
context = parent.getContext();
// "listview_item" Layout을 inflate하여 convertView 참조 획득.
if(convertView == null){
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.fragment_custom_list, parent, false);
}

// 화면에 표시될 View(Layout이 inflate된)으로부터 위젯에 대한 참조 획득
TextView textView1 = (TextView)convertView.findViewById(R.id.textView);
TextView textView2 = (TextView)convertView.findViewById(R.id.textView2);
Log.i("TV",">>>>>> " + textView1.toString() + " <<<<");

// Data Set(listViewItemList)에서 position에 위치한 데이터 참조 획득
ListViewItem listViewItem = listViewItems.get(position);

// 아이템 내 각 위젯에 데이터 반영
textView1.setText(listViewItem.getTitle());
textView2.setText(listViewItem.getContents());

return convertView;
}

// 아이템 데이터 추가를 위한 함수. 개발자가 원하는대로 작성 가능.
public void addItem(String title, String contents){
ListViewItem item = new ListViewItem();
item.setTitle(title);
item.setContents(contents);

listViewItems.add(item);
}

}




728x90
반응형