1. activity_main.xml

//title과 list부분의 전체적인 style을 설정한다

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http:/

/schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">

<TextView
android:id="@+id/tv01"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text = "jusung"
android:textSize="30dp"
android:textStyle="bold"/>
<ListView
android:id="@+id/listView01"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="9">
</ListView>
</LinearLayout>

 

2. item_style.xml

//list부분에서 item내부의 style을 설정한다

<?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="match_parent">

<ImageView
android:id="@+id/icon"
android:layout_width="80dp"
android:layout_height="80dp"/>
<TextView
android:id="@+id/title"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:textStyle="bold"
android:padding="10dp"
android:paddingTop="30dp"/>
<TextView
android:id="@+id/comment"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:paddingTop="30dp"/>
<Button
android:id="@+id/btn_select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text = "select"/>
</LinearLayout>

 

3. Data.java

//data를 객체를 활용하기위한 class

package com.example.myapplication;

public class Data {
private int icon;
private String title;
private String comment;

public Data(int icon, String title, String comment){
this.icon = icon;
this.title = title;
this.comment = comment;
} //객체를 생성하기위한 생성자

public int getIcon(){
return icon;
}
public String getTitle(){
return title;
}
public String getComment(){
return comment;
}
}

 

4. MainActivity.java

//data를 가져오기위한 ArrayList생성하고 data를 추가한다

//Data class에 생성자를이용해 객체를 생성하고 add method를이용해 배열에 추가시킨다

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

private ArrayList<Data> data = null;
private CustomAdapter cAdapter = null;
private ListView listView = null;

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

data = new ArrayList<Data>();

data.add(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));
data.add(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));
data.add(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));
data.add(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));
data.add(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));
data.add(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));

cAdapter = new CustomAdapter( context: this, R.layout.item_style, data);

//item_style의 layout을 설정하고 위에만들어논 data로 cAdapter를 생성한다

listView = findViewById(R.id.listView01);

//listView를 id를통해 가져온다
listView.setAdapter(cAdapter);

//listView에 Adapter로 setting한다
}
}

5.itemView.java

//item_style에 입력된 data를 memory로 loading하기위해서

//객체화하는과정이필요한데 이를 inflation이라고한다

//item_style에 정의된 style에 data를 가져와 세팅시킨다

package com.example.myapplication;

import android.content.Context;
import android.view.LayoutInflater;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class itemView extends LinearLayout{
private ImageView mIcon;
private TextView mTitle;
private TextView mComment;

//생성자 생성
public itemView(Context context, Data data){
super(context);

//인플레이션: 메모리에 올려 객체화하는것
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.item_style, root: this, attachToRoot: true);
//inflate method를 이용해 item_style를 parameter로 불러오고
//root element를 linearlayout으로 설정하고 root를 포함한다에 true값을 설정

//set Icon
mIcon = findViewById(R.id.icon);
mIcon.setImageResource(data.getIcon());

//set Title
mTitle = findViewById(R.id.title);
mTitle.setText(data.getTitle());

//set Comment
mComment = findViewById(R.id.comment);
mComment.setText(data.getComment());
}//Data class에 getIcon method를 이용해 return값을 받아오고
}//Set함수를 이용해 세팅시킨다

 

6. CustomAdapter.jave

//추상class BaseAdapter을 상속받아서

//getView, getCount method를 이용해 CustomAdapter를 만든다

//getCount는 item의 개수를 return해주는 역할을한다

//item은 item index를 통해 구분을 해주는데

//indexr값을 구하려면 getCount를 통해 전체 item의 개수를 알아야한다

//getView는 item에 보이는 View와 관련이있다

package com.example.myapplication;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;

public class CustomAdapter extends BaseAdapter {
private Context mContext = null;
private int layout = 0;
private ArrayList<Data> mData = null;
private LayoutInflater inflater = null;

//data를 입력하기위한 ArrayList를 만든다

public CustomAdapter(Context context, int layout, ArrayList<Data> mData){
this.mContext = context;
this.layout = layout;
this.mData = mData;
this.inflater = (LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
} //생성자 생성


public int getCount(){
return mData.size();
} //index를 얻어오기위해 item의 개수를 return
public Object getItem(int position){
return mData.get(position).getTitle();
} //position은 item의 index위치를 가져오기위한 parameter이다
public long getItemId(int position){
return position;
} //position을 매개변수로 index값을 가져온다
public View getView(int position, View convertView, ViewGroup parent){
if(convertView == null){
convertView = inflater.inflate(this.layout, parent, attachToRoot: false);
}//만들어진 item view를 convertView를 통해 불러온다.

//하나만 있으면되기때문에 null인경우를 확인후 생성한다
ImageView ico = convertView.findViewById(R.id.icon);
TextView title = convertView.findViewById(R.id.title);
TextView comment = convertView.findViewById(R.id.comment);
Button btn_select = convertView.findViewById(R.id.btn_select);

//만들어논 item_style(image, text, text, button) 을 convertView를통해 불러온다

ico.setImageResource(mData.get(position).getIcon());
title.setText(mData.get(position).getTitle());
comment.setText(mData.get(position).getComment());

//불러온 객체를 position을 활용하여 setting 해줘야한다

if((position%2) == 1){
convertView.setBackgroundColor(0x800000ff);
}else{
convertView.setBackgroundColor(0x200000ff);
} //item들에 색깔을지정하여 구분하기쉽게한다
return convertView;
}
}

 

Result

inflation을 itemView에 설정할경우

MainActivity.java, itemView.java, CustomAdapter.java 파일을

아래와같이 변경한다

4. MainActivity.java

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

private ArrayList<Data> data = null;
private CustomAdapter cAdapter = null;
private ListView listView = null;

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

cAdapter = new CustomAdapter(context: this);
cAdapter.addItem(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));
cAdapter.addItem(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));
cAdapter.addItem(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));
cAdapter.addItem(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));
cAdapter.addItem(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));
cAdapter.addItem(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));

listView = findViewById(R.id.listView01);
listView.setAdapter(cAdapter);
}
}

 

5.itemView.java

package com.example.myapplication;

import android.content.Context;
import android.view.LayoutInflater;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class itemView extends LinearLayout{
private ImageView mIcon;
private TextView mTitle;
private TextView mComment;

//생성자 생성
public itemView(Context context, Data data){
super(context);

//인플레이션: 메모리에 올려 객체화하는것
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.item_style, this, true);
//inflate method를 이용해 item_style를 parameter로 불러오고
// root element를 linearlayout으로 설정하고 root를 포함한다에 true값을 설정

//set Icon
mIcon = findViewById(R.id.icon);

//set Title
mTitle = findViewById(R.id.title);

//set Comment
mComment = findViewById(R.id.comment);
//Data class에 getIcon method를 이용해 return값을 받아오고
//Set함수를 이용해 세팅시킨다
}
public void setIcon(int icon){mIcon.setImageResource(icon);};
public void setTitle(String data){mTitle.setText(data);};
public void setComment(String data){mComment.setText(data);};
//Data class에 get mothod를 setting하는 작업
}

6. CustomAdapter.jave

package com.example.myapplication;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;

public class CustomAdapter extends BaseAdapter {
private Context mContext = null;
private ArrayList<Data> mData = new ArrayList<Data>();

public CustomAdapter(Context context){
this.mContext = context;
}

//item 추가위한 method
public void addItem(Data data){
mData.add(data);
} //MainActivity에서 data를 추가시키기위한 method

//item의 개수를 return
public int getCount(){
return mData.size();
}
public Object getItem(int position){
return mData.get(position).getTitle();
}
public long getItemId(int position){
return position;
}
public View getView(int position, View convertView, ViewGroup parent){
itemView itemView;
if(convertView == null){
itemView = new itemView(mContext, mData.get(position));
//position을 이용해 data를가져오고 itemView를 생성한다
}else{
itemView = (itemView)convertView;
} //이미 있을경우 itemView를 (itemView)형변환을해준후
// 기존의 convertView로 대채해준다

itemView.setIcon(mData.get(position).getIcon());
itemView.setTitle(mData.get(position).getTitle());
itemView.setComment(mData.get(position).getComment());
//position을 활용하여 itemView에 set method와
// Data class에 get mothod를이용해 세팅한다

if((position%2) == 1){
itemView.setBackgroundColor(0x800000ff);
}else{
itemView.setBackgroundColor(0x200000ff);
}
return itemView;
}
}

'android studio' 카테고리의 다른 글

AdapterView(ListView)  (0) 2019.08.10
view에 도형, 텍스트 그리기  (0) 2019.08.10
Button, RadioButton, CheckBox, ImageView, ImageButton  (0) 2019.08.10
text view  (0) 2019.08.09
android layout  (0) 2019.08.07

+ Recent posts