1. 결과 & 코드파일

 

"리스트뷰(ListView) 사용법"이랑 똑같음

 

 

 

2. 코드

- activity_main.xml

- 다음 코드들은 똑같음 ( 생략 )

 

 

 

 

3. 똑같은 코드임

- MainActivity.java


public class MainActivity extends AppCompatActivity {

    SingerAdapter adapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        GridView gridView = (GridView)findViewById(R.id.gridView);



        adapter = new SingerAdapter();
        adapter.addItem(new SingerItem("트와이스","010-1234-5678",R.drawable.icon01));
        adapter.addItem(new SingerItem("노라조","010-9979-5678",R.drawable.icon01));
        adapter.addItem(new SingerItem("트와이스","010-1234-5678",R.drawable.icon01));
        adapter.addItem(new SingerItem("노라조","010-9979-5678",R.drawable.icon01));

        gridView.setAdapter(adapter);

        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                // 데이터는 어댑터에서 관리 한다고 했다!!
                SingerItem item = (SingerItem)adapter.getItem(position);   // 해당 아이템 가져옴
                Toast.makeText(getApplicationContext(),"선택 : "+ item.getName(),Toast.LENGTH_LONG).show();
            }
        });

        // 참고 - adapter.notifyDataSetChanged();
    }


    // 어댑터
    class SingerAdapter extends BaseAdapter{
        ArrayList<SingerItem> items = new ArrayList<SingerItem>();

        @Override
        public int getCount() {
            return items.size();
        }

        @Override
        public Object getItem(int position) { // 필요할 때 데이터 좀 줄래? 몇번째 데이터 인지 준다
            return items.get(position);
        }

        @Override
        public long getItemId(int position) {  // id라는 값이 있으면 그것을 줘라
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // 어댑터가 데이터를 관리하기때문에 데이터를 관리하는 어댑터가
            // 화면에 보여질 각각의 item들을 위한 뷰를 만들어 달라는거.
//            SingerItemView view = new SingerItemView(getApplicationContext());

            // 수정함 (만약에 100개의 데이터가 있다고 하면 100개의 item을 전부 로딩을 하면 메모리가 엄청 많이 쓰게 된다!!
            // 그래서 view를 만들어 줄 때!,
            // 만약 실제 화면에 보여줄께 7개 정도가 보여 진다고 한다면,
            // 7개보다 조금 많은 수를 만든 다음에
            // 화면에 안보여 지는 것들은 다시 재사용하게 할 수가 있다. 그러면서 new로 새로 만들 필요가 없어진다.
            // 그래서 코드를 재사용 할 수 있도록
            // convertView를 넘겨주면 된다.
            SingerItemView view = null;
            if(convertView == null){
                view = new SingerItemView(getApplicationContext());
            }else{
                view = (SingerItemView) convertView; // 캐스팅만 해서 재사용하면 된다
            }

            SingerItem item = items.get(position);
            view.setName(item.getName());
            view.setMobile(item.getMobile());
            view.setImage(item.getResId());

            return view;
            // view를 리턴해 주면 그대로 item들이 보여 질 것이다.
        }

        // 리스트 추가
        public void addItem(SingerItem item){
            items.add(item);
        }
    }
}