일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 안드로이드
- 프래그먼트
- 개발
- 한글
- 컴퓨터과학총론
- C
- techEmpower
- error
- server
- 구글
- 자바
- MySQL
- unity
- it
- 개발자
- Portfolio
- caddy
- kakao
- NGINX
- C lanuage
- javascript
- android
- H2O
- 번역
- php
- centOS7
- 해석
- java
- ubuntu
- mariadb
- Today
- Total
개발모음집
[안드로이드 프로그래밍] Day16 리스트뷰 사용하기 본문
* 데이터 조작은 리스트뷰에서는 안되고, 어댑터에서 관리한다.
MyList의 MainActivity.java
package com.example.tristan91.mylist;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
ListView listView;
SingerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView);
adapter = new SingerAdapter(); // 어댑터 객체 생성
listView.setAdapter(adapter); // 리스트에 어댑터를 추가
}
class SingerAdapter extends BaseAdapter {
String[] names = {"소녀시대", "AOA", "IOI", "걸스데이"};
@Override
public int getCount() { // 리스트뷰가 어댑터한테 리스트 몇 개가지고 있냐고 물어보면 실행하는 메소드
return names.length;
}
@Override
public Object getItem(int position) { // position == index
return names[position]; // 실제값을 넘겨줌
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView view = new TextView(getApplicationContext());
view.setText(names[position]);
view.setTextColor(Color.BLACK);
view.setTextSize(50.0f);
return view;
}
}
}
MyList의 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.tristan91.mylist.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_centerHorizontal="true" />
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/listView"
android:layout_below="@+id/button"
android:layout_centerHorizontal="true" />
</RelativeLayout>
결과물
그런데 보통 리스트는 한글로만 안하고 그림과 함께 나온다.
--> '뷰그룹'사용
MyList의 MainActivity.java
package com.example.tristan91.mylist;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
public class MainActivity extends AppCompatActivity {
ListView listView;
SingerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView);
adapter = new SingerAdapter();
listView.setAdapter(adapter); // 리스트에 어댑터를 추가
}
class SingerAdapter extends BaseAdapter {
String[] names = {"소녀시대", "AOA", "IOI", "걸스데이"};
String[] ages = {"28", "22", "20", "25"};
@Override
public int getCount() { // 리스트뷰가 어댑터한테 리스트 몇 개가지고 있냐고 물어보면 실행하는 메소드
return names.length;
}
@Override
public Object getItem(int position) { // position == index
return names[position]; // 실제값을 넘겨줌
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
/*
TextView view = new TextView(getApplicationContext());
view.setText(names[position]);
view.setTextColor(Color.BLACK);
view.setTextSize(50.0f);
return view;
*/
SingerItemView view = new SingerItemView(getApplicationContext());
view.setName(names[position]);
view.setAge(ages[position]);
return view;
}
}
}
리스트뷰의 리스트에 들어갈 레이아웃을 만들어주자
MyList의 singer_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@android:drawable/sym_def_app_icon"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center_vertical">
<TextView
android:id="@+id/nameTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="30dp"
android:textColor="#ff000000"
/>
<TextView
android:id="@+id/ageTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20dp"
android:textColor="#ff0000ff"
/>
</LinearLayout>
</LinearLayout>
이 xml과 짝을 이뤄줄 java소스파일 생성
MyList의 SingerItemView.java
package com.example.tristan91.mylist;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.LinearLayout;
import android.widget.TextView;
/**
* Created by Tristan91 on 2016-06-09.
*/
public class SingerItemView extends LinearLayout{
//singer_item.xml의 짝으로 만들어진 소스코드 그렇기 때문에 xml 레이아웃의 최상위 레이아웃인 LinearLayout의 클래스를 상속받아야한다.
TextView nameTextView;
TextView ageTextView;
public SingerItemView(Context context) {
super(context);
init(context);
}
public SingerItemView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context context) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); //인플래이션
inflater.inflate(R.layout.singer_item, this, true);
nameTextView = (TextView) findViewById(R.id.nameTextView);
ageTextView = (TextView) findViewById(R.id.ageTextView);
}
public void setName(String name) {
nameTextView.setText(name);
}
public void setAge(String age) {
ageTextView.setText(age);
}
}
그런데 데이터를 소스안에 넣어두는 경우가 없다.
보통은 db에서 끌어오겠지?
MyList의 MainActivity.java
package com.example.tristan91.mylist;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
ListView listView;
SingerAdapter adapter;
// 사용자가 입력한 데이터로 보자
String[] names = {"소녀시대", "AOA", "IOI", "걸스데이"};
String[] ages = {"28", "22", "20", "25"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView);
adapter = new SingerAdapter();
adapter.addItem(new SingerItem(names[0], ages[0])); // 데이터 추가
adapter.addItem(new SingerItem(names[1], ages[1]));
adapter.addItem(new SingerItem(names[2], ages[2]));
adapter.addItem(new SingerItem(names[3], ages[3]));
listView.setAdapter(adapter); // 리스트에 어댑터를 추가
}
class SingerAdapter extends BaseAdapter {
ArrayList<SingerItem> items = new ArrayList<SingerItem>(); // 아이템 보관하기 위한 소스
@Override
public int getCount() { // 리스트뷰가 어댑터한테 리스트 몇 개가지고 있냐고 물어보면 실행하는 메소드
return items.size();
}
public void addItem(SingerItem item) { // 데이터를 추가해주는 메서드
items.add(item);
}
@Override
public Object getItem(int position) { // position == index
return items.get(position); // 실제값을 넘겨줌
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) { //View convertView 리스트가 많아지면 메모리가 많이 먹음, 그래서 재사용을 함으로써 재사용을 위한 인자
/*
TextView view = new TextView(getApplicationContext());
view.setText(names[position]);
view.setTextColor(Color.BLACK);
view.setTextSize(50.0f);
return view;
*/
SingerItemView view = null;
if (convertView == null) { // 뷰가 없으면 생성
view = new SingerItemView(getApplicationContext());
} else {// 재사용
view = (SingerItemView) convertView;
}
SingerItem curItem = items.get(position);// 현재 아이템
view.setName(curItem.getName());
view.setAge(curItem.getAge());
return view;
}
}
}
MyList의 SingerItem.java
package com.example.tristan91.mylist;
/**
* Created by Tristan91 on 2016-06-09.
*/
public class SingerItem {
//데이터 저장클래스
String name, age;
public SingerItem() {
}
public SingerItem(String name, String age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
MyList의 activity_main.xml
'Android' 카테고리의 다른 글
android expandablelistview (0) | 2017.04.05 |
---|---|
[안드로이드 프로그래밍] Day17 스피너 사용하기 (1) | 2016.06.10 |
[안드로이드 프로그래밍] Day15 선택위젯의 사용과 커스텀뷰 만들기 (0) | 2016.06.09 |
[안드로이드 프로그래밍] Day14 프레그레스바와 시크바 사용하기 (0) | 2016.06.09 |
[안드로이드 프로그래밍] Day13 페이지 슬라이딩 (0) | 2016.06.08 |