2016-11-25 3 views
1

Я пытаюсь изменить глобальную переменную, используя позицию страницы пейджера представления.Использование позиции Pager Adapter для изменения глобальной переменной

Внутри мой взгляд пейджера адаптера:

public Object instantiateItem(ViewGroup container, int position) { 

    ... 

    Global global = new Global(); 
    switch(position){ 
     case 0: global.setLocation("0"); 
      break; 
     case 1: global.setLocation("1"); 
      break; 
     case 2: global.setLocation("2"); 
      break; 
     case 3: global.setLocation("3"); 
      break; 
     default: global.setLocation(""); 
      break; 
    } 
    return item_view; 
} 

Если я переключать страницы, так же место ... Однако, когда я тост места, это неправильное место.

Пример: Я нахожусь на странице 3, global.getLocation = "2" или я на странице 1, global.getLocation = "3"; (Ответы часто меняются)

Что является неправильным в отношении использования позиции пейджера представления для изменения глобальной переменной?

Как я могу выполнить эту задачу правильно?

Больше код попытки решения ...

public class Location extends AppCompatActivity { 
    ViewPager viewPager; 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.location2); 

    viewPager = (ViewPager)findViewById(R.id.myViewPager); 
    adapterLocation = new CustomSwipeAdapterLocation(this); 
    viewPager.setAdapter(adapterLocation); 

    int position = viewPager.getCurrentItem(); 
    Toast.makeText(this, position, 
      Toast.LENGTH_LONG).show(); 
    } 
    ... 

Ошибка:

 FATAL EXCEPTION: main 
       Process: andrewnguyen.finishedmoietyapp, PID: 5463 
       java.lang.RuntimeException: Unable to start activity ComponentInfo{andrewnguyen.finishedmoietyapp/andrewnguyen.finishedmoietyapp.Location}: android.content.res.Resources$NotFoundException: String resource ID #0x0 

Ошибка относится к строке "Int позиции = viewPager.getCurrentItem();"

ответ

1

Вы можете использовать OnPageChangeListener и получать позицию внутри onPageSelected() Способ:

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 
      Global global = new Global(); 
      switch(position){ 
       case 0: global.setLocation("0"); 
        break; 
       case 1: global.setLocation("1"); 
        break; 
       case 2: global.setLocation("2"); 
        break; 
       case 3: global.setLocation("3"); 
        break; 
       default: global.setLocation(""); 
        break; 
      } 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 

Другое использование опции getCurrentItem() получить позицию реальный предмет:

viewPager.getCurrentItem(); 

, если вы используете position переменную instantiateItem() значений положения меняются, когда новые страницы инстанцируются

+0

Хмм .. Пробовал и получил: Ресурсы $ NotFoundException ... –

+0

mmm Эндрю опубликуйте свой код, и я могу вам помочь. – Jorgesys

+0

Это то, что я пробовал ... int position = viewPager.getCurrentItem(); Toast.makeText (это, позиция, Toast.LENGTH_LONG) .show(); –