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);
}
}
}
'■ Android > Tip' 카테고리의 다른 글
[Android] 인텐트(Intent)사용법(10) - 인텐트와 데이터 전달 [설명] (0) | 2020.01.09 |
---|---|
[Android] <include/>태그 - 레이아웃 재사용 (0) | 2020.01.09 |
[Android] List - (2)스피너(Spinner) 사용법 (0) | 2020.01.07 |
[Android] List - (1)리스트뷰(ListView) 사용법 - 클릭 이벤트, 재사용(재활용) (0) | 2020.01.07 |
[Android] List - (1)리스트뷰(ListView) 사용법 (0) | 2020.01.07 |