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

뷰페이저 페이지접근관련 질문있습니다!

0 추천

안녕하세요

지금 xml에 뷰페이지 영역을 정해주었구요

어답터안에 총 10개의 레이아웃을 뷰페이저 안에 집어넣었습니다.

그리고 메인 엑티비티에 그 xml을 setContentView해준다음 

viewpager = (ViewPager)findViewById(R.id.viewpager);

adapter = new Adapter(this);

viewpager.setAdapter(adapter);

코드로 10개의 레이아웃을 뿌려주었습니다.

 

문제는!!! 

제가 각각의 레이아웃마다 기능을 집어넣어야되는데

예를들면..

3번째 페이지,즉 3번째 레이아웃에  slidingDrawer를 집어넣어서 다열렸을때 이벤트랑 내려갔을때 이벤트를 처리한다던지

 

각각의 페이지마다의 기능을 구현을 해야하는데.. 페이지에 어떤식으로 접근해서 컨트롤해줘야할지

전혀모르겠습니다...도와주세요!

 

브붐 (970 포인트) 님이 2014년 1월 27일 질문

2개의 답변

+1 추천
페이지 포지션 별로 레이아웃을 뿌려주실 수 있는 상황인가요?

그렇다면 각각의 레이아웃을 뿌릴 때

페이지 어댑터를 상속받은 클래스를 만들어서 지원하는 함수에서 포지션 값을 받아서

View v = null;

switch (position) {

case 0 :  v = inflater.inflate(R.layout.main1, container, false) ;

               break;

case 1 :  v = inflater.inflate(R.layout.main2, container, false);

             break;

}

뭐 대충 이런식으로 하셨을 거 같은데 만약에 버튼 이벤트를 해당 페이지에만 추가하고 싶다하면

v.findViewById(r.id.button1).setOnclickListener(mButtonClick); 왼쪽처럼 객체의 아이디를 찾아서

해당 뷰에 연결하면 클릭이벤트를 쓸 수 있어용.

 

switch (position) {

case 0 :  v = inflater.inflate(R.layout.main1, container, false);              

                v.findViewById(r.id.button1).setOnclickListener(mButtonClick);

              break;

case 1 :  v = inflater.inflate(R.layout.main2, container, false)

              break;

}

 

클릭리스너는 onCreate 가 아닌 액티비티 클래스 안에다가

private static OnClickListener mButtonClick = new OnClickListener(){

   public void onClick(View v) {

     switch(v.getId() ) {

          case R.id.button1 : // 행동

             break;

       }

   }

}; 이런식으로 작성하시면 되용~
초보개발자ㅠ (33,870 포인트) 님이 2014년 1월 28일 답변
와 감사합니다 일단 말씀하신대로 해보고 오겠습니다!
어답터에
else if(position == 5){
            view = layoutInflater.inflate(R.layout.detail_teacher_1, null);
            SlidingDrawer slide = (SlidingDrawer)findViewById(R.id.SlidingDrawerT);
            slide.setOnDrawerOpenListener(null);
            view.findViewById(R.id.slideHandleButtonT);
말씀하신대로 슬라이딩드로워를 아이디로 가져와서 적어놨구요
    private static OnDrawerOpenListener test = new OnDrawerOpenListener() {
       
        public void onDrawerOpened(View v) {
            // TODO Auto-generated method stub
            switch(v.getId()){
            case R.id.SlidingDrawerT : slideHandleButtonT.setBackgroundResource(R.drawable.test);
           
            }
        }

디테일액티비티에 이런식으로했는데 안되네요..에러가떠요 ㅠㅠ
슬라이딩이 다올라왔을떄 버튼모양을 바꾸는 그런이벤트인데 ㅠㅠ
어답터에서 5번째 페이지에 슬라이딩드로워 오픈이벤트를 줄거라서요
else if(position == 5){
            view = layoutInflater.inflate(R.layout.detail_teacher_1, null);
            OnDrawerOpenListener test = null;
            ((SlidingDrawer) view.findViewById(R.id.SlidingDrawerT)).setOnDrawerOpenListener(test);
            view.findViewById(R.id.slideHandleButtonT);
           
작성하였구요!

액티비티에서는
    private static OnDrawerOpenListener test = new OnDrawerOpenListener() {
       

        @Override
        public void onDrawerOpened() {
            View slideHandleButtonT = null;
            // TODO Auto-generated method stub
            slideHandleButtonT.setBackgroundResource(R.drawable.selector_btn_down);
           
        }
    };

이렇게했어요! slidingDrawer가 오픈되었을때 버튼모양이 바뀔수있게!
그런데 안되네요..
음.. 그런 목적이라면~ 해당 페이지에만 존재하는 버튼에 직접 접근해야되니까 이벤트를 살짝 변경해야겠어요. 클릭리스너를 액티비티에 빼지말고 포지션 받아서 레이아웃 처리하는 부분으로 이동!!

else if(position == 5){
      view = layoutInflater.inflate(R.layout.detail_teacher_1, null);
      SlidingDrawer sd = (SlidingDrawer) v.findViewById (슬라이딩드로워아이디);
      final Button bt = (Button) v.findViewById (핸들버튼아이디)
      sd.setOnDrawerOpenListener(new SlidingDrawer.OnDrawerOpenListener() {
              @Override
              public void onDrawerOpened() {
                      bt.setBackgroundResource(변경할이미지);
              }
      });
0 추천
각각의 레이아웃들을 Fragment로 처리하면 되지 않나요? 벌써 고려해보신 건가요?
쎄미 (162,410 포인트) 님이 2014년 1월 28일 답변
예..프래그먼트로는 잘안되더라구요..제가 잘 못하는건지..ㅠㅠㅠ
...