2015-08-18 3 views
-2

В моей MainActivity я пытаюсь получить контекст элемента управления (прядильника), который находится на фрагменте. Я использую FragmentStatePagerAdapter для управления фрагментами. Последняя строка моего onCreate() выдает исключение, потому что mSpinner возвращает null. Ive пытался эту линию два различных способа, как показано на рисунке и:View Проблемы с контекстом пейджера

mSpinner = (Spinner) mVP.findViewById(R.id.spinner1); 

Я предполагаю, что мой контекст неверен, но не имеют опыта, чтобы знать, как исправить, не слепо гадать. Спасибо за любую конструктивную помощь, которую вы можете предложить заранее! :)

Мой код выглядит следующим образом:

public class MainActivity extends FragmentActivity { 
    MyAdapter mAdapter; 
    ViewPager mVP; 
    Spinner mSpinner; 
    Spinner.OnItemSelectedListener onSpinner; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mAdapter = new MyAdapter(getSupportFragmentManager()); 
     mVP = (ViewPager) findViewById(R.id.viewPager); 
     mVP.setAdapter(mAdapter); 
     mSpinner = (Spinner) findViewById(R.id.spinner1); 
    } 

    public static class MyAdapter extends FragmentStatePagerAdapter { 
     public MyAdapter(FragmentManager fm) { 
      super(fm); 
     } 

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

     @Override 
     public Fragment getItem(int pos) { 
      switch (pos) { 

       case 0:return FirstFragment.newInstance("FirstFragment, Instance 1"); 
       case 1:return SecondFragment.newInstance("SecondFragment, Instance 1"); 
       case 2:return ThirdFragment.newInstance("ThirdFragment, Instance 1"); 
       case 3:return ThirdFragment.newInstance("ThirdFragment, Instance 2"); 
       case 4:return ThirdFragment.newInstance("ThirdFragment, Instance 3"); 
       default:return ThirdFragment.newInstance("ThirdFragment, Default"); 
      } 
     } 
    } 
} 
+0

где ваш логарифм? –

+0

это очевидно! u не могу получить доступ к компонентам фрагментов, которые обрабатываются адаптером, здесь в действии .. этот способ. для обходного пути. Независимо от того, что вы хотите сделать с помощью spinner..implement onpagechangeListener и вызвать getadapter.getview.findViewbyid (id) и делать то, что вы хотите делать. Хотя это уродливое обходное решение! –

ответ

1

Вы можете получить Ваше мнение Fragment таким образом, а затем использовать вид фрагмента, чтобы найти Spinner используя findViewById().

Попробуйте это.

View fragment_view = getLayoutInflater().inflate(R.layout.fragment_view, null); 
Spinner mSpinner = (Spinner) fragment_view.findViewById(R.id.spinner1); 

Надеюсь, это поможет!

+0

Спасибо. В то время как другие хотят быть саркастичными и комментировать, что я делаю неправильно, вы показали, что делать правильно! – Cartoondog

1

Я пытаюсь получить контекст элемента управления (прядильника), который находится на фрагменте.

Это не будет работать:

mSpinner = (Spinner) findViewById(R.id.spinner1);

Поскольку один из ваших фрагментов содержит вертушку, так что вы должны получить ссылку вращателя от фрагмента, а не от деятельности!