2012-07-15 8 views
3

저는 Android 개발에 익숙하지 않고 & 코드를 연구하여 Android 프로젝트를 디자인하고 있습니다. ViewPager에 문제가있어서이 사이트 또는 Google 검색을 통해 답변을 찾을 수 없습니다.ViewPager에서 OnClickListener를 설정하는 방법

문제 : 가 나는 ViewPager에서의 동안 Button이 동작을 실행할 수 없습니다.

당신은 여기 내 프로젝트 & APK 파일을 볼 수 있습니다

:

public class PagerDemo extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.activity_pager_demo); 

     myPagerAdapter adapter = new myPagerAdapter(); 
     ViewPager myPager = (ViewPager) findViewById(R.id.myfivepanelpager); 
     myPager.setAdapter(adapter); 
     myPager.setCurrentItem(2); 

     SetAllBtnFunc(); 
    } 

    public void SetAllBtnFunc() { 
     //all func 
     View.OnTouchListener touch = new View.OnTouchListener() { 

       public boolean onTouch(View v, MotionEvent event) { 
        // TODO Auto-generated method stub 
        Log.d("hlv_trinh", "Button be Touched!"); 
        return false; 
       } 
      }; 

      View.OnClickListener click = new View.OnClickListener() { 

       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        Log.d("hlv_trinh", "Button be Clicked!"); 
       } 
      }; 

     //Get view 
     View v = getLayoutInflater().inflate(R.layout.middle, null); 

     Button b = (Button) v.findViewById(R.id.myBtn); 
     b.setOnClickListener(click); 
     b.setOnTouchListener(touch); 
     } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_pager_demo, menu); 
     return true; 
    } 
    private class myPagerAdapter extends PagerAdapter { 

     public int getCount() { 
      return 5; 
     } 

     public Object instantiateItem(View collection, int position) { 

      LayoutInflater inflater = (LayoutInflater) collection.getContext() 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      int resId = 0; 
      switch (position) { 
      case 0: 
       resId = R.layout.farleft; 
       break; 
      case 1: 
       resId = R.layout.left; 
       break; 
      case 2: 
       resId = R.layout.middle; 
       break; 
      case 3: 
       resId = R.layout.right; 
       break; 
      case 4: 
       resId = R.layout.farright; 
       break; 
      } 

      View view = inflater.inflate(resId, null); 

      ((ViewPager) collection).addView(view, 0); 

      return view; 
     } 

     @Override 
     public void destroyItem(View arg0, int arg1, Object arg2) { 
      ((ViewPager) arg0).removeView((View) arg2); 

     } 


     @Override 
     public boolean isViewFromObject(View arg0, Object arg1) { 
      return arg0 == ((View) arg1); 

     } 

     @Override 
     public Parcelable saveState() { 
      return null; 
     } 
    } 
    } 

내 레이아웃 여기에 콘텐츠 : https://dl.dropbox.com/u/9820517/ForOneTimeDownload/TestPagerView.rar 다음

내 PagerDemo.java입니다

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="Middle" 
     android:textSize="30dp" > 
    </TextView> 

    <Button 
     android:id="@+id/myBtn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Test Click" /> 
</LinearLayout> 
+0

편집 해 주셔서 감사합니다. ^^ –

답변

5

다음은 쉬운 해결책입니다.

public void AnyName(View v) { 
    // Do your stuff 
} 

ViewPageronClickListener을 설정 레이아웃 XML에서
은 버튼 태그에, 당신의 PagerDemo.java, 장소에 다음 android:onClick="AnyName"을 설정합니다.

+1

**주의 **는 저를 좋아합니다. 즉, _findViewById_ 및 _setOnClickListener_ 님의 광기가 없으면 정말 필요한 것을하십시오. – Inoy

0

전 보기 호출기에 뭔가 까다로운 솔루션을 발견했습니다. pager에 대한 클릭 이벤트가 없다면 뷰 호출기의 자식에 대한 클릭 이벤트를 시도 할 수 있습니다. 즉, 각 페이지의 루트 요소에 클릭 리스너를 설정하는 것입니다. 확실하게 작동합니다.

관련 문제