2013-04-10 4 views
0

Я использую ViewPager и загружаю несколько фрагментов в Fragment Activity, используя FragmentPage Adapter. Я хочу получить фрагмент, содержащий ImageButton. Может ли кто-нибудь помочь мне получить доступ к Imagebutton от фрагмента в активности фрагментов?Как получить доступ к ImageButton из фрагмента в активности фрагментов?

Вот мой код:

Фрагмент активности

 /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_gallery); 
     mAdapter = new MyAdapter(getSupportFragmentManager()); 

     mPager = (CustomPager) findViewById(R.id.pager); 
     mPager.setAdapter(mAdapter); 
     mPager.setOnPageChangeListener(this); 

     pagerLayout = (LinearLayout) findViewById(R.id.tour_pager_lay); 
     mPageControl = (PageControl)findViewById(R.id.horizontal_pager); 
     mPageControl.addPagerControl(3); 
    } 

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

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

     @Override 
     public Fragment getItem(int position) { 
      switch (position) { 
      case 0: 
       return new ImageFragment(R.drawable.landing_logo); 
      case 1: 
       return new ImageFragment(R.drawable.welcome_postit); 
      case 2: 

       return new LoginFragment(); 
      case 4: 
       return new RegisterFragment(); 

      default: 
       return null; 
      } 
     } 
    } 

ответ

1

Предположим, что ваш ImageButton на вашем RegisterFragment, то вы можете сделать:

RegisterFragment tmp = ((RegisterFragment) ((MyAdapter) mPager.getAdapter()).instantiateItem(mPager, 4)); 

//your ImageButton should be public or you can create a getter or something, I assume that it's public 
tmp.imageButton.setText("foo"); 
+0

Это дает мне NullPointerException :( – Newts

+0

Да, я вижу, это потому, что у вас есть ошибка в вашем коде, и я ее не видел. Это в вашем адаптере в getItem met корыто. У вас есть case 4: return new RegisterFragment(); 'но у вас есть только 3 страницы, поэтому он должен быть« case 3: ... ». И в моем коде вы должны изменить параметр в 'instantiateItem (mPager, 4)' на 'instantiateItem (mPager, 3)'. –

+0

Я делаю это, и он снова дает мне такую ​​же ошибку – Newts

Смежные вопросы