◎Material Design : Gogle 디자인 가이드 라인
①Navigation Drawer
②Toolbar
③AppBar Layout, TabLayout
④Floating Action Button, SnackBar - Toast와 비슷하지만 업그레이드 된거라 생각하면 됨.
⑤CoordinatorLayout, NestedScrollView
⑥CollapsingToolbarLayout - 무너질 수 있는 툴바
⑦RecyclerView - 배치 관리자를 사용하는데 3가지가 있다.(Linear, Grid, Staggerd Grid ) Layout Manager가 있다.
이번 예제에서는 Linear Layout Manager를사용해보았다.
두개의 라이브러리 추가하자. (cardview, recyclerview)
대량의 데이터
아이템 레이아웃 만들기
이제 어댑터를 만들자.
MyAdapter.java 코드
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
package com.lcw.ex54recyclerview;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import java.util.ArrayList;
public class MyAdapter extends RecyclerView.Adapter {
ArrayList<String> datas;
LayoutInflater inflater;
public MyAdapter(ArrayList<String> datas, LayoutInflater inflater) {
this.datas = datas;
this.inflater = inflater;
}
//이 메소드가 실행된다면 재활용할 뷰가 없다는 뜻임.
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//이 메소드안에서 리사이클러뷰가 보여줄
//뷰를 만들어 내서 ViewHoler를 리턴함 (like. getView()와 비슷함)
View itmeview= inflater.inflate(R.layout.listview_item,parent,false);
//itemView를 보관하는 ViewHolder객체 생성
VH holder= new VH(itmeview);
return holder;
}
//아이템뷰에 데이터들 연결하는 메소드 : 항목마다 실행됨
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
//아이템뷰를 보관하고 있는 VH를 다운캐스팅
VH vh= (VH) holder;
}
@Override
public int getItemCount() {
return datas.size();
}
//이너 클래스
class VH extends RecyclerView.ViewHolder{
TextView tv;
public VH(@NonNull View itemView) {
super(itemView);
tv=itemView.findViewById(R.id.tv);
}
}// VH class..
}
|
이제 배치 관리자 (Linear, Grid, Staggerd Grid Layout Manager)를 사용해야 화면에 보일 것이다.
배치 관리자를 .xml에 추가하지 않으면, 화면에 안보인다.
그리고 목록을 눌렀을 때, 반응을 해보자. Toast를 사용할 것이기 때문에 MyAdapter를 조금 바꿔야한다.
이렇게 수정하고 MainActivity.java도 수정한다.
<실행 화면>
여기서 GridLayoutManager도 추가로 알아보겠다. 간단하다.
<실행 화면>
activity_main.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<?xml version="1.0" encoding="utf-8"?>
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"
tools:context=".MainActivity">
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:padding="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:orientation="vertical">
</RelativeLayout>
|
MainActivity.java
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
31
32
33
34
35
36
37
38
39
40
41
|
package com.lcw.ex54recyclerview;
import android.os.Bundle;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
ArrayList<String> datas= new ArrayList<>();
MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//대량의 데이터
datas.add("aaa");
datas.add("bbb");
datas.add("ccc");
datas.add("ddd");
datas.add("eee");
datas.add("fff");
datas.add("ggg");
datas.add("hhh");
recyclerView=findViewById(R.id.recyclerview);
adapter=new MyAdapter(datas, this);
recyclerView.setAdapter(adapter);
//GridLayoutManager적용해 보기
GridLayoutManager layoutManager= new GridLayoutManager(this,2);
recyclerView.setLayoutManager(layoutManager);
}
}
|
listview_item.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<?xml version="1.0" encoding="utf-8"?>
android:layout_width="match_parent"
android:layout_height="80dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:cardCornerRadius="8dp"
app:cardBackgroundColor="@color/colorPrimary"
app:contentPadding="16dp"
app:elevation="4dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp">
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello"
android:textColor="#FFFFFF"
android:textStyle="bold"
android:textSize="24sp"/>
|
MyAdapter.java
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
package com.lcw.ex54recyclerview;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import java.util.ArrayList;
public class MyAdapter extends RecyclerView.Adapter {
ArrayList<String> datas;
// LayoutInflater inflater;
Context context;
public MyAdapter(ArrayList<String> datas, Context context) {
this.context = context;
}
//이 메소드가 실행된다면 재활용할 뷰가 없다는 뜻임.
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//이 메소드안에서 리사이클러뷰가 보여줄
//뷰를 만들어 내서 ViewHoler를 리턴함 (like. getView()와 비슷함)
LayoutInflater inflater=LayoutInflater.from(context);
View itmeview= inflater.inflate(R.layout.listview_item,parent,false);
//itemView를 보관하는 ViewHolder객체 생성
VH holder= new VH(itmeview);
return holder;
}
//아이템뷰에 데이터들 연결하는 메소드 : 항목마다 실행됨
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
//아이템뷰를 보관하고 있는 VH를 다운캐스팅
VH vh= (VH) holder;
String s= datas.get(position);
}
@Override
public int getItemCount() {
return datas.size();
}
//이너 클래스
class VH extends RecyclerView.ViewHolder{
TextView tv;
public VH(@NonNull final View itemView) {
super(itemView);
tv=itemView.findViewById(R.id.tv);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//클릭된 아이템뷰가 리사이클러뷰에서
//몇번째 index(position)인지 알아내기
int position= getLayoutPosition();
Toast.makeText(context, position+"",Toast.LENGTH_SHORT).show();
}
});
}
}// VH class..
}
|
'안드로이드 웹앱 콘테츠 개발자 양성(국비지원) > Adapter View' 카테고리의 다른 글
Android Studio Material Design 그외 4 (RecyclerView 2-2) 많이 사용됨! [중요!!] (0) | 2019.10.02 |
---|---|
Android Studio Material Design 그외 4 (RecyclerView 2-1) 많이 사용됨! [중요!!] (0) | 2019.10.02 |
Android Studio Material Design 그외 4(RecyclerView 하기 전 이야기) (0) | 2019.10.01 |
Android Studio ViewPager (0) | 2019.09.25 |
Android Studio Adapter View - List View 3 (0) | 2019.09.17 |
댓글