2015-03-12 7 views
1

У меня есть четыре класса:Как перейти к методу фрагмента от активности

  1. FragmentActivity
  2. FragmentPagerAdapter
  3. Fragmenta
  4. FragmentB

В FragmentActivity я поставил TabPagerAdapter (FragmentPagerAdapter) на ViewPager.

viewPager = (ViewPager)findViewById(R.id.pager); 
tabAdapter = new TabPagerAdapter(this, viewPager); 
viewPager.setAdapter(tabAbAdapter); 

В TabPagerAdapter я вернуть два фрагмента в GetItem() от переключателя заявления

return new fragmentA(); 
return new fragmentB(); 

поиски Фрагмент A и передает переменную в FragmentActivity с помощью метода интерфейса.

public void onDataPass(String data) { 
    kks= data; 
    viewPager.setCurrentItem(1); 
} 

Все это прекрасно работает. Я получаю данные из списка в FragmentA, и он возвращается к MainActivity. В SetCurrentItem (1) отображается Fragment B.

Часть, на которую я застрял, - это способ, которым я могу запустить FragmentB.upDateEquipment (kks) между kks = data и viewPager.SetCurrentItem() в onDataPass.

Я могу получить значение kks из Fragment B и запустить upDateEquipment, реализовав setOnClickItemListener с помощью кнопки в Fragment B, и это работает, но я бы предпочел не добавлять дополнительный клик для пользователя.

ответ

0

Вы можете попробовать это:

Fragment fr = ((ActionBarActivity) activity) 
          .getSupportFragmentManager().findFragmentByTag(
            "add_product"); 

        if (fr instanceof Sellers_Add_Product_Fragment) { 

         ((Sellers_Add_Product_Fragment) fr).yourMethod(); 
        } 
0

Я рекомендую получить фрагменты из адаптера пейджера.

class MyPagerAdapter extends FragmentPagerAdapter { 
    private FragmentA mFragmentA = new FragmentA(); 
    private FragmentA mFragmentB = new FragmentB(); 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: 
       return mFragmentA; 
      case 1: 
       return mFragmentB; 
     } 
    } 

    public ReflashStatusFragment getFragmentA() { 
     return mFragmentA; 
    } 

    public RemoteFlashFragment getFragmentB() { 
     return mFragmentB; 
    } 

Тогда просто использовать что-то вроде mPagerAdapter.getFragmentB.updateEquipment(kks);

0

Как ранее ответы, возможно, будет работать. Но я хотел добавить обновление FragmentB из метода onDataPass. Проблема, с которой я столкнулась, - это получить экземпляр FragmentB, чтобы вызвать метод updateEquipment. Я не получил правильный идентификатор в вызове findFragmentByTag. Вот как я, наконец, получил работу.

onDataPass(String data) { 
    kks = data; 
    String name - tabAdapter.makeFragmentName(viewPager.getId(), 1); 
    FragmentB fragmentB = FragmentB)getSupportFragmentManager().findFragmentByTag(name); 
    fragmentB.updateEquipment(kks); 
} 
Смежные вопросы