2016-03-04 61 views
1

我對Android編程還很陌生,我試圖設計一個應用程序,當我滑過ViewPager上的幾個圖像並佔據一些屏幕時,同一活動/屏幕的其他元素將隨之更改不需要像ViewPager那樣水平滾動。我的問題是,我無法找到一種方法來識別ViewPager中的哪個圖像是ViewPager之外的「當前」圖像。如何查看哪個圖像是ViewPager中的當前圖像?

我試圖創建一個從instantiateItem方法抓取位置的getter,但沒有運氣 - 因爲我認爲它只是創建一切,而不是再次更新,所以當我刷卡什麼都不會發生。另外,我意識到我的dieValue變量沒有做任何事情 - 但它意味着作爲我想要完成的一個例子。 dieValue變量會根據當前的圖像而變化。

CustomSwipeAdapter.java

public class CustomSwipeAdapter extends PagerAdapter { 

    private Context ctx; 
    public int[] image_resources = {R.drawable.d20, R.drawable.d8, R.drawable.d6}; 

    public CustomSwipeAdapter(Context ctx) { 

     this.ctx = ctx; 
    } 

    @Override 
    public int getCount() { 

     return image_resources.length; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == object; 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     LayoutInflater layoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View item_view = layoutInflater.inflate(R.layout.swipe_layout, container, false); 

     ImageView imageView = (ImageView) item_view.findViewById(R.id.dieImageView); 
     imageView.setImageResource(image_resources[position]); 

     TextView textView = (TextView) item_view.findViewById(R.id.dieValueTop); 
     if (position == 0) { textView.setText(R.string.d20Label); } 
     if (position == 1) { textView.setText(R.string.d8Label); } 
     if (position == 2) { textView.setText(R.string.d6Label); } 

     container.addView(item_view); 
     return item_view; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     container.removeView((LinearLayout) object); 
    } 
} 

DiceRollerActivity.java

public class DiceRollerActivity extends Activity implements View.OnClickListener { 

    ViewPager viewPager; 
    CustomSwipeAdapter adapter; 
    private int dieValue; 

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

     viewPager = (ViewPager) findViewById(R.id.dieViewPager); 
     adapter = new CustomSwipeAdapter(this); 
     viewPager.setAdapter(adapter); 

     Button RollDieButton = (Button) findViewById(R.id.rollDieButton); 
     RollDieButton.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.rollDieButton: 
       Random rand = new Random(); 
       int random = rand.nextInt(dieValue) + 1; 
       setDieResults(random); 
     } 
    } 

    // Prints the results of the die roll to the results log 
    private void setDieResults(int random) { 
     TextView dieResults = (TextView) findViewById(R.id.dieResultsLabel); 

     if (random == dieValue) { 
      dieResults.setText(getString(R.string.YouRolledLabel) + random + getString(R.string.criticalHit)); 
     } else if (random == dieValue) { 
      dieResults.setText(getString(R.string.YouRolledLabel) + random + getString(R.string.criticalMiss)); 
     }else{ 
      dieResults.setText(getString(R.string.YouRolledLabel) + random); 
     } 
    } 
} 

回答

0

你可以使用

viewPager.getCurrentItem(); 
您DiceRollerActivity.class

來獲得當前位置。

然後,要獲得圖像更好的方法是將圖像數組放在DiceRollerActivity.class上並將其傳遞到CustomSwipeAdapter構造函數。

0

裏面你CustomSwipeAdapter

public int getCurrentImageResource(int currentPosition){ 
    return image_resources[currentPosition]; 
} 

創建方法來訪問當前的圖像調用此方法傳遞當前位置viewPager.getCurrentItem()這樣

adapter.getCurrentImageResource(viewPager.getCurrentItem()); 

希望這有助於!

+0

我該在哪裏添加adapter.getCurrentImageResource代碼?在onCreate()中添加它看起來就像抓住第一個然後完成。 – Vigilant

+0

'adapter.getCurrentImageResource(viewPager.getCurrentItem());'當您需要viewPager中的當前圖像時,應該在您的活動中調用'''',而不需要在onCreate中調用它,就是在您需要時調用它。 –

+0

你的問題解決了嗎?如果您發現我們的幫助有價值,請將問題解決;) –