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

[도움필요Help.. ] 제가 만든 아래의 뷰페이저의 구조에 대해서 질문 있습니다 !!

0 추천
안녕하세요.

제가 뷰페이저로 한 페이지를 만들었는데, 구조 관련해서 최대한 해석을 해보았는데..

이게 맞는건가 십기도 하고 .. 좀 더 자세하게 구조를 알고 싶기도 하고 ..

해서 제가 분석한것과 고수님들이 분석한것을 비교해보고 공부해보고 싶습니다.

아무래도 제가 많이 모르다보기에.. 분석하는데도 조금 힘드네요 ㅠ

제가 나름대로 분석해본 것을 아래에 써보겠습니다. 고수님들께서 보시기에 잘못된부분이 있다면

한번 바로잡아주시면 감사드리겠습니다.

대략적인 구성은, 뷰페이저에 5개의 이미지와 5개의 제목, 5개의 여론조사율이 어레이리스트에 저장되어

있으며, 오른쪽으로 페이지를 넘길수록, 첫페이지에는 첫 이미지, 첫 제목, 첫 여론조사율, 두번째 페이지에는

두번째 이미지, 두번째 제목, 두번째 여론조사율 ... 식으로 5번째 까지 구성이 되어 있습니다.

소스의 부분은 제 글의 아래의 답변 부분에 이어서 달아보겠습니다.

 

** 제가 분석한 내용 **

5개의  이미지가 자리하고 있는 액티비티이고, 각 이미지들을 수첩 형식으로 옆으로 넘어가면서

볼수 있게 해주는 적합한 기능인 뷰페이저를 사용을 했다. 뷰페이저를 사용한 이유는 마치 page를 넘기듯이

손가락으로 드래그해서 좌우로 넘겨가면서 보는데 적합한 기능을 하고, View들을 Page를 넘기듯 보여주는

AdapterView의 일종이다.

여기서는 어레이 리스트를 사용해서,  이미지와  제목, 여론조사율로 구성이 되어있고, 이미지같은 경우에는

integer이라는 정수값을 줘서 총 5개의 이미지에 대한 번호가 어레이리스트에 순차적으로 저장이 되어 있고

그 아래의 제목같은 경우는 5개의 제목과 5개의 여론조사율을 String 형식의 어레이리스트에 각각 저장이 되

도록 만들었습니다.

그리고 SectionPagerAdapter이라고 해서 , 뷰페이저에서 각각의 페이지(Fragment)를 하나씩 만들어주고

그렇게 프래그넌트를 만들때, PlaceholderFragment를 만들어서 뷰페이저에게 준다. 그러면 뷰페이저는

placeHolderFragment를 하나씩 보여주게 되며 fragment_sub2.xml은 PlaceHolderFragment가 화면을 만들떄

쓰임. 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);
Kind카인드 (3,600 포인트) 님이 2016년 12월 11일 질문
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 android.widget.Button;
 import android.widget.ImageView;
 import android.widget.TextView;


 import java.util.ArrayList;

 public class Movie_ViewPager extends AppCompatActivity {


     private SectionsPagerAdapter mSectionsPagerAdapter;

     public static ArrayList<Integer> at_thumnail = new ArrayList<>();           //  이미지들 담는것
    public static ArrayList<String> at_title = new ArrayList<>();               //  제목들 담는것
    public static ArrayList<String> at_ReservationPercent = 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);

   
         // 여기같은 경우에는, 뷰페이저에 나타나는 사진임 ..
         at_thumnail.add(R.drawable.first);
         at_thumnail.add(R.drawable.second);
         at_thumnail.add(R.drawable.third);
         at_thumnail.add(R.drawable.fourth);
         at_thumnail.add(R.drawable.fifth);

         at_title.add("1. 1번타겟");
         at_title.add("2. 2번타겟");
         at_title.add("3. 3번타겟");
         at_title.add("4. 4번타겟");
         at_title.add("5. 5번타겟");

         at_ReservationPercent.add("19세");
         at_ReservationPercent.add("15세");
         at_ReservationPercent.add("15세");
         at_ReservationPercent.add("19세");
         at_ReservationPercent.add("12세");

         mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

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



     //  액티비티내에 (파일철) 프래그먼트 (a4용지)로 생각하면 될듯함
    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));

             TextView Percent = (TextView) rootView.findViewById(R.id.Reservation_Percent);
             Percent.setText(at_ReservationPercent.get(position));

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

             Button btn = (Button) rootView.findViewById(R.id.buy);

             // 이미지에 클릭 리너스를 단다.
             thunmail.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View view) {
        
                     Intent intent = new Intent(getContext(),Movie_Information.class);
                     intent.putExtra("pos",position); //int타입의 데이터를 전달한다.

                     startActivity(intent);
                 }
             });


             btn.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View view) {

                     Intent intent = new Intent(getContext(),Location_and_Seat.class);
                     intent.putExtra("Image_Toss",position);

                     startActivity(intent);
                 }
             });


             return rootView;
         }
     }


     public class SectionsPagerAdapter extends FragmentPagerAdapter {

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

         // 번들 : 객체를 저장할수 있는것
        // getItem : 페이지를 생성할때

        @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 추천
getCount : 몇개의 페이지를 생성할것인가.

getItem : getCount 개수만큼 Fragment 생성 (position을 통해서 각기 다른 Fragment를 생성할수도 있음 등등..)

args는 프레그먼트에서 사용할 변수로 Bundle 외에도 다양한 타입의 변수를 사용할수 있습니다.

PlaceholderFragment를 count 만큼 생성한다.
캬옹이 (37,920 포인트) 님이 2016년 12월 12일 답변
...