2016-12-04 6 views
0

Мое приложение состоит из макета вкладки, и каждая вкладка имеет свой собственный фрагмент. Я никогда не сталкивался с необходимостью «контейнера фрагментов», пока мне не понадобилось обновлять текущий фрагмент, когда его родительский AppCompatActivity нажал кнопку «Назад».Где я могу получить идентификатор ресурса контейнера фрагмента?

Вот мой код, когда я хочу, чтобы обновить фрагмент:

GlobalFeedTab fragment = (GlobalFeedTab) 
    getFragmentManager().findFragmentById(R.id.fragment_container); 


getFragmentManager().beginTransaction() 
    .detach(fragment) 
    .attach(fragment) 
    .commit(); 

PageAdapter:

 public class PagerAdapter extends FragmentStatePagerAdapter { 
int mTabs; 

public PagerAdapter(FragmentManager fm, int tabs) { 
    super(fm); 
    this.mTabs = tabs; 
} 

@Override 
public Fragment getItem(int position) { 

    switch (position) { 
     case 0: 
      GlobalFeedTab tab1 = new GlobalFeedTab(); 
      return tab1; 
     case 1: 
      CountryFeedTab tab2 = new CountryFeedTab(); 
      return tab2; 
     case 2: 
      CountryList tab3 = new CountryList(); 
      return tab3; 
     case 3: 
      NotificationsTab tab4 = new NotificationsTab(); 
      return tab4; 
     case 4: 
      ProfileTab tab5 = new ProfileTab(); 
      return tab5; 
     default: 
      return null; 
    } 
} 


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

}

MainActivity:

  public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); 




    tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.earthicon)); 
    tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.flagicon)); 
    tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.listicon)); 
    tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.notificationsiconi)); 
    tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.profileicon)); 
    // tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

    final ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
    final PagerAdapter adapter = new PagerAdapter 
      (getSupportFragmentManager(), tabLayout.getTabCount()); 
    viewPager.setAdapter(adapter); 
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 

     } 
    }); 



    } 
} 

ответ

0

Если вы не знаете свой идентификатор фрагментов, вы можете использовать метод FragmentManager.findFragmentByTag(String), где тег - это строка, которую вы либо помещаете в атрибуты XML фрагмента, либо в транзакции фрагментов add or replace calls.

+0

Когда я начинаю печатать '' FragmentManager.' .... findFragmentByTag() 'не всплывал @ pdegand59 – grant

+0

Что такое контейнер и как я ссылаться на него. Мне просто нужно обновить текущий фрагмент – grant

+0

, метод не является статическим, вам нужно сделать 'getFragmentManager(). FindFragmentByTag()' – pdegand59

0

1. ((ViewGroup) getView(). GetParent()). GetId(); 2. заказ из этого ответа: link

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