Development/Android
18. GridView
궁선이
2018. 5. 5. 01:44
이번 포스팅은 바로 그리드 뷰 입니다.
구현방식이 이전 포스팅인 리스트뷰와 너무너무 비슷합니다.
커스텁 어댑터를 사용해 포스팅을 하도록 하겠습니다.
다만 이전의 포스팅과는 다르게 ViewHolder가 아니라
레이아웃을 상속받은 클래스를 ViewHolder대신 사용해 보겠습니다.
자세한 코드 설명은 없이 코드 첨부하고 포스팅을 마치겠습니다.
1. 레이아웃 제작
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal|center_vertical"
android:weightSum="1">
<ImageView
android:id="@+id/img"
android:src="@drawable/abocado"
android:layout_width="137dp"
android:layout_height="96dp"
android:layout_weight="0.07"/>
<TextView
android:gravity="center_horizontal"
android:text="abocado"
android:id="@+id/tvname"
android:layout_marginTop="20dp"
android:layout_width="137dp"
android:layout_height="20dp" />
<TextView
android:visibility="visible"
android:gravity="center_horizontal"
android:id="@+id/tvprice"
android:text="10000"
android:layout_width="137dp"
android:layout_height="20dp" />
</LinearLayout>
2. Data Class 제작
public class Fruit {
private String name;
private int image;
private String price;
public Fruit(String name,int image, String price){
this.name = name;
this.image = image;
this.price = price;
}
public String getName() {
return name;
}
public int getImage() {
return image;
}
public String getPrice() {
return price;
}
}
3. 레이아웃 클래스 제작
public class GridItem extends LinearLayout{
TextView tvprice;
TextView tvname;
ImageView img;
public GridItem(Context context) {
super(context);
init(context);
}
public void init(Context context){
View view = LayoutInflater.from(context).inflate(R.layout.item,this);
tvname = (TextView)view.findViewById(R.id.tvname);
tvprice = (TextView)view.findViewById(R.id.tvprice);
img = (ImageView)view.findViewById(R.id.img);
}
public void setData(Fruit fruit){
tvname.setText(fruit.name);
tvprice.setText(fruit.price);
img.setImageResource(fruit.image);
}
}
4. Custom Adapter 제작
public class GridAdapter extends BaseAdapter {
private Context context;
private ArrayList<Fruit> fruit;
public GridAdapter(ArrayList<Fruit> fruit,Context context){
this.fruit = fruit;
this.context = context;
}
@Override
public int getCount() {
return fruit.size();
}
@Override
public Fruit getItem(int position) {
return fruit.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null)
convertView = new GridItem(context);
((GridItem)convertView).setData(fruit.get(position));
return convertView;
}
}
5. MainActivity 레이아웃
<?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="com.example.mskir.hw8.MainActivity">
<GridView
android:layout_weight="1"
android:verticalSpacing="10dp"
android:id="@+id/gridview"
android:horizontalSpacing="10dp"
android:numColumns="2"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
6. MainActivity
public class MainActivity extends AppCompatActivity{
GridView gridview;
GridAdapter gridAdapter;
ArrayList<Fruit> fruit = new ArrayList<Fruit>();
//제가 따로 추가했던 것 들 입니다.
int imglist[] = {R.drawable.abocado,R.drawable.banana,R.drawable.orange,R.drawable.kiwi,R.drawable.cherry,R.drawable.cranberry};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridview = (GridView)findViewById(R.id.gridview);
fruit.add(new Fruit("Abocado",imglist[0],"10000"));
fruit.add(new Fruit("Banana",imglist[1],"5000"));
fruit.add(new Fruit("Orage",imglist[2],"4000"));
fruit.add(new Fruit("Kiwi",imglist[3],"8000"));
fruit.add(new Fruit("Cherry",imglist[4],"2000"));
fruit.add(new Fruit("Cranberry",imglist[5],"6000"));
gridAdapter = new GridAdapter(fruit,this);
gridview.setAdapter(gridAdapter);
}
}
감사합니다.