woong's

Android ViewPager Fragment 사용하기 본문

Develop/Android

Android ViewPager Fragment 사용하기

dlsdnd345 2016. 2. 14. 16:26

Android ViewPager Fragment 사용하기


 Android ViewPager 사용하기

 

저번 포스트에 이어 이번에는 ViewPager 와 Fragment 를 통해서 Custom ViewPager 를 사용해보도록 하겠습니다 .


저번 프로젝트와 구조는 비슷 합니다 .

하나 추가 된것이라면 Pragment 가 추가 되었습니다 .


1
2
3
4
5
6
7
8
9
10
11
12
13
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    tools:context=".MainActivity" >
    
          <android.support.v4.view.ViewPager
          android:id="@+id/view_pager"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />
 
</RelativeLayout>

 

 

화면 구성은 저번 포스트와 동일 합니다 .


xml 하나가 추가 되었습니다 .


1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 
    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
 
</RelativeLayout>


ViewPager 의 View 하나를 구성하는 xml 입니다 .저는 ImageView 만 넣었지만 , 이곳에서 Custom을 진행하면

ViewPager에서 표현하고 싶은것을 표현 할수 있습니다 .


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.manishkpr.viewpagerimagegallery;
 
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
 
public class MainActivity extends FragmentActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
        PagerAdapter mPagerAdapter = new PagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(mPagerAdapter);
    }
 
}
 

 

 

MainActivity 또한 유사 합니다 .

달라진점은 상속을 FragmentActivity 로 바꾼점과 PagerAdapter 를 FragmentStatePagerAdapter 로 변경한 점입니다 .


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
public class PagerAdapter extends FragmentStatePagerAdapter {
    
    Context context;
    Bitmap galImage;
 
    private final int[] galImages = new int[] {
            R.drawable.image_01,
            R.drawable.image_02,
            R.drawable.image_03,
            R.drawable.image_03,
            R.drawable.image_04,
            R.drawable.image_05
    };
 
    PagerAdapter(FragmentManager fragmentManager) {
        super(fragmentManager);
    }
 
    @Override
    public int getCount() {
        return galImages.length;
    }
 
    @Override
    public Fragment getItem(int position) {
        return PageFragment.create(position, galImages[position]);
    }
}

 

 

 

 

저번 포스트에 비해 adapter에 내용이 별로 없습니다 .

내용이 없는것은 대부분의 코드를 Fragment에 비중을 더 두었기 때문입니다 .


Adapter 에서 하는것은 getItem 메서드를 통해서 Fragment 쪽으로 데이터와 position을 넘겨주는 코드가 

다인것같습니다 .


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
public class PageFragment extends Fragment {
 
    private int image;
    private Bitmap bitmapImage;
    BitmapFactory.Options options;
 
    public static PageFragment create(int image) {
        PageFragment fragment = new PageFragment();
        Bundle args = new Bundle();
        args.putInt("image", image);
        fragment.setArguments(args);
        return fragment;
    }
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        image = getArguments().getInt("image");
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_page, container, false);
 
        options = new BitmapFactory.Options();
        options.inSampleSize = 4;
        bitmapImage = BitmapFactory.decodeResource(rootView.getResources(), image, options);
        ImageView imageView = (ImageView) rootView.findViewById(R.id.image);
        imageView.setImageBitmap(bitmapImage);
        return rootView;
    }
}

 

 

핵심 코드입니다 .

 

1
2
3
4
    @Override
    public Fragment getItem(int position) {
        return PageFragment.create(galImages[position]);
    }

 

 

Adapter 로 부터 넘겨 받은 image 를 

 public static PageFragment create(int image) 에서 받습니다 .

받아서 fregment 를 return 합니다 .


onCreate 에서 return 한 데이터를 받아 변수에 담습니다.


onCreateView에서 View 를 구성한후 onCreate 에서 담은 Image 를 넣어주는 부분이 되겠습니다 .


이렇게 구성하면 이전 포스트와 달리 화면을 자유자제로 디자인 할수 있습니다 .


 



'Develop > Android' 카테고리의 다른 글

Vertical & Hrizontal ViewPager 사용하기  (0) 2016.02.14
Android 대용량 이미지 처리  (0) 2016.02.14
Android ViewPager 사용하기  (0) 2016.02.14
Android Color Picker 사용 하기  (0) 2016.02.14
Android widget configure 사용하기  (1) 2016.02.14
Comments