마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

뷰페이저 관련해서 궁금한 점이 있습니다.

0 추천

 

안녕하세요.

아래의 뷰페이저 관련해서 궁금한 점이 있어서 글을 올렸습니다.

짧게 구성이 되어 있는 뷰페이저인데, 제가 이부분에 관련해서, 확실하게 구조에 알지 못해서,

다들 시간이 없으시고  바쁘시겠지만 한번 설명좀 듣고 싶어서, 이렇게 글을 썼습니다.

 

제가 풀이해본 결과는 아래와 같습니다.

int를 저장하는 ArrayList인 at_thumnail 을 만들고 String을 저장하는 at_title을 만듭니다.

그리고 뷰페이저인 mViewPager을 만들고  String 부분의 AGE_SECTION_NUMBER을 만들었습니다.

그리고, 이미지를 담는 at_thumnail에 5개의 이미지를 넣고, 문자열을 담는 at_title에 5개의 문자열을 담았습니다.

그리고 뷰들을 더 효과적으로 보여주기 위해서 어뎁터를 mSelectionsPagerAdapter 쓰기 위해서

setAdapter를 씁니다(?) . 그리고 아래쪽의 SectionsPagerAdapter는 뷰페이저에서 원하는 페이지(프래그넌트)를

하나씩 만들어 준다..

 

뷰페이지 관련해서 보다 좀 확실하게 이해하고 싶어서 여기저기 둘러다니면서 많이 보는데도 ..

저에겐 이해가 쉽지 않네요. 그리고 사실 SectionsPagerAdapter 아래쪽부터 시작해서는 어떻게 이 관계들이

유기적으로 흘러가는지 잘 모르겠습니다. 언뜻보기에 뷰페이저라고 하는 커다란 Container를 만들고

그 안쪽의 각각의 페이지는 fragment라고 하는 각각의 페이지들로 구성이 된다고 저는 이해했고

그로인해 총 5개의 이미지와 텍스트들이 적혀있는 5개의 프레그넌트가 있다고 생각했습니다.

그리고 아래의 소스에서 보았을때 static String ARG_SECTION_NUMBER = "section_number";

이 부분도 정확히 이해를 하지 못했습니다.. 

소스가 조금 추가되는 부분은 아래의 답변 부분에 이어서 달아보겠습니다ㅠ

 

import android.content.Intent;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;

public class PX_ViewPager extends AppCompatActivity {

    private SectionsPagerAdapter mSectionsPagerAdapter;

    public static ArrayList<Integer> at_thumnail = new ArrayList<>();   // 이미지들 담는것
    public static ArrayList<String> at_title = new ArrayList<>();      // 제목들 담는것
   

    private ViewPager mViewPager;

    static String  ARG_SECTION_NUMBER = "section_number";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setTitle("타이틀");
        setContentView(R.layout.activity_movie_viewpager);

        //  뷰페이저에 나타나는 5가지 사진
        at_thumnail.add(R.drawable.1);
        at_thumnail.add(R.drawable.2);
        at_thumnail.add(R.drawable.3);
        at_thumnail.add(R.drawable.4);
        at_thumnail.add(R.drawable.5);

        at_title.add("1번클릭");
        at_title.add("2번클릭");
        at_title.add("3번클릭");
        at_title.add("4번클릭");
        at_title.add("5번클릭");



 
Kind카인드 (3,600 포인트) 님이 2016년 11월 25일 질문
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

        mViewPager = (ViewPager) findViewById(R.id.container);
        mViewPager.setAdapter(mSectionsPagerAdapter);
    }

    public static class PlaceholderFragment extends Fragment {


        public PlaceholderFragment() {
        }


        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {

            final int position = getArguments().getInt(ARG_SECTION_NUMBER);

            View rootView = inflater.inflate(R.layout.fragment_sub2, container, false);

            TextView title = (TextView) rootView.findViewById(R.id.title);
            title.setText(at_title.get(position));

            ImageView thunmail = (ImageView) rootView.findViewById(R.id.thunmail);
            thunmail.setImageResource(at_thumnail.get(position));

            return rootView;
        }
    }


    public class SectionsPagerAdapter extends FragmentPagerAdapter {

        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {

            Bundle args = new Bundle(); // 번들 생성
            args.putInt(ARG_SECTION_NUMBER, position); // 인텐튼의 데이터전달과 같다. (키,값)

            //프래그먼트를 생성
            PlaceholderFragment fragment = new PlaceholderFragment();
            fragment.setArguments(args);

            return fragment;
        }

        @Override
        public int getCount() {
            return 5;
        }
    }


}

1개의 답변

0 추천

안녕하세요

static String ARG_SECTION_NUMBER "section_number";  

사용 목적에 대해서는 public Fragment getItem(int position) 메소드에서

 Bundle 생성시 키 값으로 사용하려고 한 것 입니다. 

그래서

onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)

해당하는  화면 포지션을 가져올 때 사용합니다.

final int position = getArguments().getInt(ARG_SECTION_NUMBER);

 

사용법을 설명한 사이트를 기재했으면 참고 사이트도 있으니

궁금증 해결하시길 바랍니다.

http://www.hardcopyworld.com/ngine/android/index.php/archives/164

 

히로시 (10,800 포인트) 님이 2016년 11월 25일 답변
...