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); } }

감사합니다.