안드로이드 listview 질문드립니다.
조회수 974회
ListView listView = findViewById(R.id.listview);
SingerAdapter adapter = new SingerAdapter();
adapter.addItem(new SingerItem("1","2"));
adapter.addItem(new SingerItem("1","2"));
adapter.addItem(new SingerItem("1","2"));
listView.setAdapter(adapter);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), secondActivity.class);
ArrayList<SingerItem> items = new ArrayList<SingerItem>();
intent.putExtra("items", items);
startActivity(intent);
}
})
메인액티비티에서 보내고 난 후 받는쪽 어댑터에서 어떻게 처리해야 될지 모르겠어서 질문드립니다.
public class secondAdapter extends BaseAdapter {
ArrayList<SingerItem> items = (ArrayList<SingerItem>) intent.getSerializableExtra("items");
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
SingerItemView view = new SingerItemView(getApplicationContext());
SingerItem item = items.get(position);
view.setTitle(item.getTitle());
view.setMainText(item.getMaintext());
return view;
}
}
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
secondActivity 에서 intent.getSerializable() 을 통해 List 를 전달 받은 후 부터 설명 드리겠습니다.
ListView 구성
final SingerAdapter adapter = new SingerAdapter(dataSet); final ListView listView = findViewById(R.id.listView); listView.setAdapter(adapter);
Adapter 객체를 생성하여 ListView 에 setAdapter() 를 호출 합니다.
Adapter 구성
static class SingerAdapter extends BaseAdapter { final List<SingerItem> dataSet; SingerAdapter(List<SingerItem> dataSet) { this.dataSet = dataSet; } @Override public int getCount() { return dataSet.size(); } @Override public SingerItem getItem(int position) { return dataSet.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row, null); holder = new ViewHolder(); holder.title = convertView.findViewById(R.id.title); holder.mainText = convertView.findViewById(R.id.mainText); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.title.setText(getItem(position).getTitle()); holder.mainText.setText(getItem(position).getMainText()); return convertView; } static class ViewHolder { TextView title; TextView mainText; } }
SingerAdapter 생성자에서 ListView 에 바인딩 될 dataset 를 매개변수로 하여 받습니다. ListView 에서 중요한 부분은 getView() 인데, ListView 의 row 를 구성하는 view 가 항상 새롭게 생성 되어 쓰이지 않고 재활용 해서 사용하기 위해 holder 패턴을 사용하여 구현합니다. getView() 가 호출 될떄마다 매번 view 를 생성하는 것은 메모리에도 영향을 줄 뿐 아니라 findViewById() 또한 퍼포먼스에 있어서 매번 호출 하는 것은 좋지 않습니다.
ListView 는 위와 같이 사용하시면 될것 같구요. ListView 보다 개선 된 버전이라 할수있는 RecyclerView 를 사용하시면 더 좋습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력