0

我正在使用帶有5個片段的viewpager啓用水平滾動。我已經放置了一個與每個頁面相對應的圖標,以便用戶可以知道他在哪個頁面上。我還編程瞭如果一個圖標被按下,相應的頁面圖標突出顯示。 但是,如果圖標被按下並且用戶在該頁面上,圖標將突出顯示。但是,如果我滑動到另一頁,我該如何更改圖標?通過viewpager更改片段頁時更改圖標

MainActivity

import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.view.ViewPager; 
import android.support.v4.view.ViewPager.SimpleOnPageChangeListener; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ImageButton; 

public class MainActivity extends FragmentActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     /** Getting a reference to the ViewPager defined the layout file */ 
     final ViewPager pager = (ViewPager) findViewById(R.id.pager); 
     PageListener pagelistener = new PageListener(); 
     pager.setOnPageChangeListener(pagelistener); 

     /** Getting fragment manager */ 
     FragmentManager fm = getSupportFragmentManager(); 

     /** Instantiating FragmentPagerAdapter */ 
     MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(fm); 

     /** Setting the pagerAdapter to the pager object */ 
     pager.setAdapter(pagerAdapter); 

     pager.setPageTransformer(true, new ZoomOutPageTransformer()); 

     final ImageButton vpOne = (ImageButton) findViewById(R.id.vpOne); 
     final ImageButton vpTwo = (ImageButton) findViewById(R.id.vpTwo); 
     final ImageButton vpThree = (ImageButton) findViewById(R.id.vpThree); 
     final ImageButton vpFour = (ImageButton) findViewById(R.id.vpFour); 
     final ImageButton vpFive = (ImageButton) findViewById(R.id.vpFive); 
     final ImageButton vpSix = (ImageButton) findViewById(R.id.vpSix); 

     OnClickListener One = new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       pager.setCurrentItem(0, true); 
       vpOne.setImageResource(R.drawable.vp_One); 
       vpTwo.setImageResource(R.drawable.vp_Two_bw); 
       vpThree.setImageResource(R.drawable.vp_Three_bw); 
       vpFour.setImageResource(R.drawable.vp_Four_bw); 
       vpFive.setImageResource(R.drawable.vp_Five_bw); 
       vpSix.setImageResource(R.drawable.vp_Six_bw); 
      } 
     }; 

     OnClickListener Two = new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       pager.setCurrentItem(1, true); 
       vpOne.setImageResource(R.drawable.vp_One_bw); 
       vpTwo.setImageResource(R.drawable.vp_Two); 
       vpThree.setImageResource(R.drawable.vp_Three_bw); 
       vpFour.setImageResource(R.drawable.vp_Four_bw); 
       vpFive.setImageResource(R.drawable.vp_Five_bw); 
       vpSix.setImageResource(R.drawable.vp_Six_bw); 
      } 
     }; 

     OnClickListener Three = new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       pager.setCurrentItem(2, true); 
       vpOne.setImageResource(R.drawable.vp_One_bw); 
       vpTwo.setImageResource(R.drawable.vp_Two_bw); 
       vpThree.setImageResource(R.drawable.vp_Three); 
       vpFour.setImageResource(R.drawable.vp_Four_bw); 
       vpFive.setImageResource(R.drawable.vp_Five_bw); 
       vpSix.setImageResource(R.drawable.vp_Six_bw); 
      } 
     }; 

     OnClickListener Four = new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       pager.setCurrentItem(3, true); 
       vpOne.setImageResource(R.drawable.vp_One_bw); 
       vpTwo.setImageResource(R.drawable.vp_Two_bw); 
       vpThree.setImageResource(R.drawable.vp_Three_bw); 
       vpFour.setImageResource(R.drawable.vp_Four); 
       vpFive.setImageResource(R.drawable.vp_Five_bw); 
       vpSix.setImageResource(R.drawable.vp_Six_bw); 
      } 

     }; 

     OnClickListener Five = new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       pager.setCurrentItem(4, true); 
       vpOne.setImageResource(R.drawable.vp_One_bw); 
       vpTwo.setImageResource(R.drawable.vp_Two_bw); 
       vpThree.setImageResource(R.drawable.vp_Three_bw); 
       vpFour.setImageResource(R.drawable.vp_Four_bw); 
       vpFive.setImageResource(R.drawable.vp_Five); 
       vpSix.setImageResource(R.drawable.vp_Six_bw); 
      } 
     }; 

     OnClickListener Six = new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       pager.setCurrentItem(5, true); 
       vpOne.setImageResource(R.drawable.vp_One_bw); 
       vpTwo.setImageResource(R.drawable.vp_Two_bw); 
       vpThree.setImageResource(R.drawable.vp_Three_bw); 
       vpFour.setImageResource(R.drawable.vp_Four_bw); 
       vpFive.setImageResource(R.drawable.vp_Five_bw); 
       vpSix.setImageResource(R.drawable.vp_Six); 
      } 
     }; 

     vpOne.setOnClickListener(One); 
     vpTwo.setOnClickListener(Two); 
     vpThree.setOnClickListener(Three); 
     vpFour.setOnClickListener(Four); 
     vpFive.setOnClickListener(Five); 
     vpSix.setOnClickListener(Six); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
} 

class PageListener extends SimpleOnPageChangeListener { 

    final ImageButton vpOne = (ImageButton) findViewById(R.id.vpOne); 
    final ImageButton vpTwo = (ImageButton) findViewById(R.id.vpTwo); 
    final ImageButton vpThree = (ImageButton) findViewById(R.id.vpThree); 
    final ImageButton vpFour = (ImageButton) findViewById(R.id.vpFour); 
    final ImageButton vpFive = (ImageButton) findViewById(R.id.vpFive); 
    final ImageButton vpSix = (ImageButton) findViewById(R.id.vpSix); 

    public void onPageSelected(int position) { 
     int noOfPages = 5; 
     int currentPage = position; 
     if (currentPage % noOfPages == 0) { 
      vpOne.setImageResource(R.drawable.vp_One); 
      vpTwo.setImageResource(R.drawable.vp_Two_bw); 
      vpThree.setImageResource(R.drawable.vp_Three_bw); 
      vpFour.setImageResource(R.drawable.vp_Four_bw); 
      vpFive.setImageResource(R.drawable.vp_Five_bw); 
      vpSix.setImageResource(R.drawable.vp_Six_bw); 
     } 

     else if (currentPage % noOfPages == 1) { 
      // add like the above 
     } 

     else if (currentPage % noOfPages == 2) { 
      // add like the above 
     } 

     else if (currentPage % noOfPages == 3) { 
      // add like the above 
     } 

     else if (currentPage % noOfPages == 4) { 
      // add like the above 
     } 
    } 
} 

MyFragmentPagerAdapter

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 

public class MyFragmentPagerAdapter extends FragmentPagerAdapter{ 

    final int PAGE_COUNT = 6; 

    /** Constructor of the class */ 
    public MyFragmentPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    /** This method will be invoked when a page is requested to create */ 
    @Override 
    public Fragment getItem(int arg0) { 

     switch(arg0){ 

     case 0: 

      return new OneFragment();   

     case 1: 
      return new TwoFragment(); 

     case 2: 
      return new ThreeFragment(); 

     case 3: 
      return new FourFragment(); 

     case 4: 
      return new FiveFragment(); 

     case 5: 
      return new SixFragment();   

     default: 
      return null; 

     }  
    } 

    /** Returns the number of pages */ 
    @Override 
    public int getCount() { 
     return PAGE_COUNT; 
    }  
} 

我試圖在每個片段以下,但沒有奏效:

片段

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.ImageButton; 

public class OneFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View v = inflater.inflate(R.layout.one, container, false); 

      ImageButton vpOne = (ImageButton) v.findViewById(R.id.vpOne); 
      ImageButton vpTwo = (ImageButton) v.findViewById(R.id.vpTwo); 
      ImageButton vpThree = (ImageButton) v.findViewById(R.id.vpThree); 
      ImageButton vpFour = (ImageButton) v.findViewById(R.id.vpFour); 
      ImageButton vpFive = (ImageButton) v.findViewById(R.id.vpFive); 
      ImageButton vpSix = (ImageButton) v.findViewById(R.id.vpSix); 

      vpOne.setImageResource(R.drawable.vp_One); 
      vpTwo.setImageResource(R.drawable.vp_Two_bw); 
      vpThree.setImageResource(R.drawable.vp_Three_bw); 
      vpFour.setImageResource(R.drawable.vp_Four_bw); 
      vpFive.setImageResource(R.drawable.vp_Five_bw); 
      vpSix.setImageResource(R.drawable.vp_Six_bw); 

      return v; 
    } 
} 

回答

1

viewPagerSpecialist的答案應該照顧你最初的問題,但你的另一個問題是試圖在新創建的內部類中訪問Views。需要聲明的ViewsonCreate()讓你的內部類會有像

public class MainActivity extends FragmentActivity { 

    ImageButton vpOne; //declare them here 
    ImageButton vpTwo; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ... 

    vpOne = (ImageButton) findViewById(R.id.vpOne); //initialize them here 
    vpTwo = (ImageButton) findViewById(R.id.vpTwo); 

訪問他們,帶他們出去的新類的。現在你將可以在你的內部課堂上訪問他們。注意我也刪除了final修飾符。

+0

這解決了我的問題 – mXX

2

首先,您必須在滑動時找出當前頁面。 對你有通過實施 SimpleOnPageChangeListener爲您MainActivity內的內部類的類應該是這樣的

private static class PageListener extends SimpleOnPageChangeListener{ 
     public void onPageSelected(int position) { 
      int noOfPages =5; 
      currentPage = position; 
      if(currentPage % noOfPages == 0){ 
     vpOne.setImageResource(R.drawable.vp_One); 
      vpTwo.setImageResource(R.drawable.vp_Two_bw); 
      vpThree.setImageResource(R.drawable.vp_Three_bw); 
      vpFour.setImageResource(R.drawable.vp_Four_bw); 
      vpFive.setImageResource(R.drawable.vp_Five_bw); 
      vpSix.setImageResource(R.drawable.vp_Six_bw); 
      } 

      else if(currentPage % noOfPages == 1){ 
       //add like the above 
      } 

      else if(currentPage % noOfPages == 2){ 
      //add like the above 
      } 

      else if(currentPage % noOfPages == 3){ 
       //add like the above 
      } 

      else if(currentPage % noOfPages == 4){ 
       //add like the above 
      } 
     } 
    } 

實現頁面註冊監聽器監聽器在onCreate()MainActivity和裏面只是做這樣

pagelistener=new PageListener(); 
pager.setOnPageChangeListener(pagelistener); 
+0

這不起作用我得到的'方法findViewById(int)是未定義的類型PageListener'錯誤。我無法在該課程中找到該ID。我也不得不將類更改爲'class PageListener extends SimpleOnPageChangeListener'而不是'private static class PageListener extends SimpleOnPageChangeListener'我在第一篇文章中更新了代碼,因此您可以檢查它。 – mXX