2015-05-13 2 views
0

У меня есть просмотрщик с фрагментами, я хочу обновить свой просмотрщик новыми фрагментами, как только я нажму на элемент своего счетчика. , теперь, независимо от значений счетчика, адаптер не обновляет сам. это то, что я сделал до сих пор:Update viewepager on spinner action

public class MainActivity extends FragmentActivity { 
private ViewPager pager; 
Spinner spinner; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    pager = (ViewPager) findViewById(R.id.viewPager); 
    spinner = (Spinner) findViewById(R.id.spinner); 

    ArrayAdapter<CharSequence> stringArrayAdapter = ArrayAdapter.createFromResource(this, 
    R.array.language, android.R.layout.simple_spinner_item); 
    stringArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(stringArrayAdapter); 

    spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { 

     if(spinner.getSelectedItem().toString().equals("Frensh")) 
     { 
     pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager())); 
     pager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
      @Override 
      public void onPageSelected(int position) { 
       invalidateOptionsMenu(); 
      } 
     }); 
     } 

     else if(spinner.getSelectedItem().toString().equals("English")) 
     { 
     pager.setAdapter(new MyPagerAdapter2(getSupportFragmentManager())); 
     pager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
      @Override 
      public void onPageSelected(int position) { 
       invalidateOptionsMenu(); 
      } 
     }); 

     } 
     } 
     } 
     @Override 
     public void onNothingSelected(AdapterView<?> parentView) { 
      // your code here 
     } 
     }); 
} 

public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 
    getMenuInflater().inflate(R.menu.activity_screen_slide, menu); 

    menu.findItem(R.id.action_previous).setEnabled(pager.getCurrentItem() > 0); 
    MenuItem item = menu.add(Menu.NONE, R.id.action_next, Menu.NONE, 
      (pager.getCurrentItem() == pager.getAdapter().getCount() - 1) 
        ? R.string.action_finish 
        : R.string.action_next); 
    item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 
    return true; 
} 

public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      NavUtils.navigateUpTo(this, new Intent(this, MainActivity.class)); 
      return true; 
     case R.id.action_previous: 
      pager.setCurrentItem(pager.getCurrentItem() - 1); 
      return true; 
     case R.id.action_next: 
      pager.setCurrentItem(pager.getCurrentItem() + 1); 
      return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

это класс, который содержит мои Frensh фрагменты:

public static class MyPagerAdapter extends FragmentPagerAdapter { 

    public MyPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int pos) { 

     switch(pos) { 
     case 0: return Fr_FirstFragment.newInstance("Page : 1"); 
     case 1: return Fr_SecondFragment.newInstance("Page : 2"); 
     case 2: return Fr_ThirdFragment.newInstance("Page : 3"); 
     case 3: return Fr_FourthFragment.newInstance("Page : 4"); 
     default: return null; 
     } 
    } 

    @Override 
    public int getCount() { 
     return 4; 
    }   
} 

это класс, который содержит мои английские фрагменты:

public static class MyPagerAdapter2 extends FragmentPagerAdapter { 

    public MyPagerAdapter2(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int pos) { 

     switch(pos) { 
     case 0: return En_FirstFragment.newInstance("Page : 1"); 
     case 1: return En_SecondFragment.newInstance("Page : 2"); 
     case 2: return En_ThirdFragment.newInstance("Page : 3"); 
     case 3: return En_FourthFragment.newInstance("Page : 4"); 
     default: return null; 
     } 
    } 

    @Override 
    public int getCount() { 
     return 4; 
    }  
} 
+0

Можете ли вы подтвердить код, на котором на самом деле работает блок, на который вы нажимаете элемент прядильника? pager.setAdapter (новый MyPagerAdapter (getSupportFragmentManager())); называется ? – osayilgan

+0

да, я думаю, это работает. он заряжает фрагменты без проблем. –

+0

Вы думаете, или это действительно работает. Потому что код, который обновляет ViewPager, кажется прекрасным. Можете ли вы зарегистрировать этот счетчик OnItemSelected Listener, чтобы убедиться, что это не проблема. Мне это кажется неправильным. – osayilgan

ответ

1

Ваш общий код кажется прекрасным, кроме одного. Ваш выбор использования адаптера фрагмента пейджера не предназначен для этой цели. Если вы хотите динамически обновлять данные внутри пейджера и фрагментов, вы должны использовать FragmentStatePagerAdapter, а остальные должны быть одинаковыми.

+0

должен ли я расширять MyPagerAdapte с помощью FragmentStatePagerAdapter? –

+0

Да, это то, что вы должны делать. Дайте мне знать, как только вы попробуете. – osayilgan

+0

Это был правильный способ справиться с этим. Спасибо брат –