반응형
이 게시물은 다음 링크를 참조하여 학습했습니다.
ViewPager.....
어렵다.....
처음에는 이미지뷰와 텍스트뷰를 포함하고 있는 Custom ViewPager를 만들려고 했지만,
2시간째 내가 만든 코드가 돌아가지 않는다.
이론적으로는 틀린부분이 없는 것 같은데, 아직까지는 문제점을 찾지 못했다.
막혔을 때 물어볼 곳이 없는 것도 독학의 큰 단점 중 하나라는 것을 느낀다..
ViewPager에 대해서 자세하게 설명되어 있는 블로그를 통해 간단한 ViewPager를 구현해보았다.
CustomViewPager를 구현하는 방법을 더 공부하고 추후에 업로드 해야겠다.
activity_main.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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"
tools:context=".MainActivity">
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewPager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
|
cs |
page.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:textSize="48dp"
android:id="@+id/title"/>
</androidx.constraintlayout.widget.ConstraintLayout>
|
cs |
TextViewPagerAdapter
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
|
package com.example.viewpagerexample;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;
public class TextViewPagerAdapter extends PagerAdapter {
// LayoutInflater 서비스 사용을 위한 Context 참조 저장
private Context mContext = null;
public TextViewPagerAdapter(){
}
// Context를 전달받아 mContext에 저장하는 생성자
public TextViewPagerAdapter(Context context){
mContext = context;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
View view = null;
if(mContext != null){
//LayoutInflater를 통해 "res/layout/page.xml"을 뷰로 생성
LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.page,container,false);
TextView textView = (TextView)view.findViewById(R.id.title);
textView.setText("TEXT"+position);
}
//뷰페이저에 추가
container.addView(view);
return view;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
//뷰페이저에서 삭제
container.removeView((View)object);
}
@Override
public int getCount() {
//전체 페이지 수 지정
return 10;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return (view == (View)object);
}
}
|
cs |
MainActivity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package com.example.viewpagerexample;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
private ViewPager viewPager;
private TextViewPagerAdapter pagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager)findViewById(R.id.viewPager);
pagerAdapter = new TextViewPagerAdapter(this);
viewPager.setAdapter(pagerAdapter);
}
}
|
cs |
1. PagerAdapter
ViewPager도 RecyclerView와 마찬가지로 어댑터를 사용자가 직접 구현해야 한다.
ViewPager의 어댑터는 PagerAdapter를 상속받는데 다음 속성들을 오버라이딩 해주어야 한다.
메서드 | 설명 |
Object instantiateItem(ViewGroup container, int position) | position에 해당하는 페이지 생성. |
void destroyItem(Viewgroup container, int position, Object object) | position에 해당하는 페이지 제거. |
int getCount() | 사용 가능한 뷰의 갯수를 리턴. |
boolean isViewFromObject | 페이지뷰가 특정 키 객체(key object)와 연관되는지 여부 |
반응형
'Legacy' 카테고리의 다른 글
[안드로이드 스튜디오 정리#5] ViewPager (0) | 2021.01.20 |
---|---|
[안드로이드 스튜디오 독학#20] Custom ViewPager (0) | 2021.01.20 |
[안드로이드 스튜디오 정리#4] RecyclerView (0) | 2021.01.19 |
[안드로이드 스튜디오 독학#18] Custom RecyclerView (0) | 2021.01.19 |
[안드로이드 스튜디오 정리#3] Android Component & Intent (0) | 2021.01.19 |